صفحه اصلی / آموزش برنامه نویسی / آموزش Join در Linq به زبان سی شارپ

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

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);  
}  

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



رمز فایل : www.mspsoft.ir , www.mspsoft.com
کانال ام اس پی سافت

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *



دوره های آنلاین ام اس پی سافت

آموزش طراحی فروشگاه اینترنتی

آموزش طراحی فروشگاه اینترنتی

طراحی سیستم مدیریت مشتریان

طراحی سیستم مدیریت مشتریان

دوره طراحی وب سایت پورتال خبری

دوره طراحی وب سایت پورتال خبری

دوره طراحی حسابداری فروشگاه

دوره طراحی حسابداری فروشگاه