آموزش Join در Linq به زبان سی شارپ
Loading...
join در Linq

این مقاله به توضیح join با استفاده از LINQ در C# می پردازد.در این آموزش به بررسی انواع join در Linq میپردازیم مثال هایی را بررسی میکنیم.

در این مقاله درباره Group Join می نویسیم.

  1. Group Join – ساختار سلسله مراتبی داده ها را تولید می کند. هر موردی از مجموعه اول با یک مجموعه ای از موردهای وابسته از مجموعه دوم جفت می شوند.
  2. هر زمان که ما Group Join با متد بسطی (Extension method) را انتخاب کنیم، نحوه استفاده از آن متد بسطی GroupJoin() می باشد.
  3. ویژوال استودیو را باز کرده و یک پروژه Console Application ایجاد می کنیم.
  4. دو کلاس با نام های Department.cs و Employee.cs اضافه می کنیم.
  5. در کلاس Department.cs کد زیر را وارد می کنیم:
using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
namespace ConsoleApplication64 {  
 public class Department {  
  public int DeptId {  
   get;  
   set;  
  }  
  public string DeptName {  
   get;  
   set;  
  }  
  public static List < Department > GetAllDepartments() {  
   return new List < Department > () {  
    new Department {  
     DeptId = 1, DeptName = "IT"  
    },  
    new Department {  
     DeptId = 2, DeptName = "Accounting"  
    },  
    new Department {  
     DeptId = 3, DeptName = "HR"  
    },  
   };  
  }  
 }  
}  

۶. این کلاس دو property با نام های DeptId و DeptName دارد و یک متد استاتیک GetAllDepartments() وجود دارد که لیستی از اشیای Department برمی گرداند. این کلاس سه دپارتمان دارد که IT، Accounting و HR هستند.

۷. کد نوشته شده در کلاس Employee نیز به ترتیب زیر است:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
namespace ConsoleApplication64 {  
 public class Employee {  
  public int Id {  
   get;  
   set;  
  }  
  public string Name {  
   get;  
   set;  
  }  
  public int DepartmentId {  
   get;  
   set;  
  }  
  public static List < Employee > GetAllEmployeesByDepartment() {  
   return new List < Employee > () {  
    new Employee {  
     Id = 1, Name = "Sama", DepartmentId = 1  
    },  
    new Employee {  
     Id = 2, Name = "Rayan", DepartmentId = 1  
    },  
    new Employee {  
     Id = 3, Name = "Soha", DepartmentId = 2  
    },  
    new Employee {  
     Id = 4, Name = "Rima", DepartmentId = 2  
    },  
    new Employee {  
     Id = 5, Name = "Aram", DepartmentId = 2  
    },  
    new Employee {  
     Id = 6, Name = "Babak", DepartmentId = 2  
    },  
    new Employee {  
     Id = 7, Name = "Ali", DepartmentId = 3  
    },  
    new Employee {  
     Id = 8, Name = "Amir", DepartmentId = 1  
    },  
    new Employee {  
     Id = 9, Name = "Ahoo", DepartmentId = 3  
    },  
    new Employee {  
     Id = 10, Name = "Leila", DepartmentId = 3  
    },  
    new Employee {  
     Id = 11, Name = "Navid", DepartmentId = 3  
    },  
   };  
  }  
 }  
}

۸. کلاس Employee شامل سه property است که Id، Name و DepartmanId هستند. در اینجا، DepartmanId کلید Join است. اگر ما بخواهیم بررسی کنیم که کارمندی متعلق به کدام دپارتمان است، property مربوطه یعنی DepartmentId را از کلاس Employee گرفته و آن را با property مربوطه در کلاس Departman یعنی DepId مطابقت می دهیم.

join در Linq

۹. از این رو، در این دو کلاس DepartmanId از کلاس Employee و DeptId از کلاس Department کلیدهای Join هستند. همچنین در کلاس Employee یک متد با نام GetAllEmployeeByDepartment() وجود دارد که لیستی از اشیای Employee برمی گرداند.

۱۰. حالا ما در حال بازیابی کارمندان از طریق دپارتمان با استفاده از Group Join، و چاپ نام دپارتمان و نام کارمند متعلق به آن دپارتمان هستیم.

۱۱. متد GetAllDepartments لیستی از اشیای Department به ما خواهد داد. می خواهیم لیستی از Department را با لیستی از Employee، Group Join بزنیم، بنابراین از متد بسطی Group Join() استفاده می کنیم.

کد زیر را در Main class می نویسیم:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
namespace ConsoleApplication64 {  
 class Program {  
  static void Main(string[] args) {  
   var employeebydept = Department.GetAllDepartments().GroupJoin(Employee.GetAllEmployeesByDepartment(),  
    d => d.DeptId, e => e.DepartmentId, (department, employees) =>  
    new {  
     Departments = department,  
      Employees = employees  
    });  
  
   foreach(var dept in employeebydept) {  
    Console.WriteLine(dept.Departments.DeptName);  
    foreach(var employee in dept.Employees) {  
     Console.Write(" ");  
     Console.WriteLine(employee.Name);  
    }  
   }  
  }  
 }  
} 

۱۲. Group Join چهار پارامتر دارد، که پارامتر اول داخلی است و نوع آن IEnumerable<TInner> است.

۱۳. در این مثال، می خواهیم Employee و Department را جوین کنیم. لیستی از Departments داریم، بنابراین دنباله لیستی از کارمندان می باشد. لیست Department دنباله خارجی است که با دنباله داخلی یعنی Employee جوین گروهی (group join) شده است.

۱۴. پارامتر دوم outerKeySelector است که property مربوط به کلید جوین است. در اینجا، ما کلید جوین را برای دنباله خارجی فراهم می کنیم که Department است. بنابراین، ما DeptId را به عنوان پارامتر دوم ارسال کرده ایم و پارامتر بعدی innerKeySelector است. در اینجا کلید جوین برای دنباله داخلی را فراهم می کنیم که Employee است. DepartmentId از کلاس Employee به عنوان پارامتر سوم ارسال می شود. پارامتر آخر resultSelector است که مشخص می کند ما چه چیزی را به عنوان نتیجه Group Join می خواهیم. ما لیستی ار Department و Employee نیاز داریم.

۱۵. درنهایت، لیستی از Employee همراه با Department آن ها را در متغیر employeebydept خواهیم داشت و می توانیم با حلقه foreach آن را چاپ نماییم.

Console.Write(dept.Departments.DeptName);  
This will print the Department Name and within each Department we are going to have Employee  
  
foreach(var employee in dept.Employees) {  
 Console.Write(" ");  
 Console.WriteLine(employee.Name);  
}  

کد بالا نمونه چاپ کارمندان مربوط به یک بخش است.



avatar فاطمه زکایی

فاطمه زکایی هستم. فارغ التحصیل کارشناسی مهندسی نرم افزار، مدت سه سال هست که در زمینه توسعه اپلیکیشن های تحت وب و اندروید و همچنین تولید محتوای تخصصی برنامه نویسی تحت وب و اندروید در مجموعه mspsoft در خدمت شما هستم.

آخرین مطالب و تخفیفات در کانال تلگرام :) کانال تلگرام ام اس پی سافت
مطالب مرتبط
ديدگاه خود را ارسال کنيد


محبوب ترين ويدئو هاي انلاين
دوره برنامه نویسی فروشگاه اینترنتی
  • تعداد اعضا 80k
  • قيمت دوره۱۰۰,۰۰۰ تومان
  • امتيازدهي
    1 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 5( 5٫00 از 1 رای )
    Loading...
دوره آموزشی سیستم ثبت سفارش آنلاین
  • تعداد اعضا 80k
  • قيمت دوره۵۰,۰۰۰ تومان
  • امتيازدهي
    1 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 5( 5٫00 از 1 رای )
    Loading...
دوره طراحی سیستم مدیریت مشتریان
  • تعداد اعضا 80k
  • قيمت دوره۵۰,۰۰۰ تومان
  • امتيازدهي
    1 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 5( 5٫00 از 1 رای )
    Loading...