LINQ Left Outer Join
LINQ Left Outer Join
في هذا الدرس، هنتعلّم إزاي ننفّذ Left Outer Join باستخدام LINQ في C#، سواء بـ Query Syntax أو Method Syntax.
ما هو Left Outer Join؟
بيرجع كل العناصر من المجموعة اليسرى (زي الأقسام)، سواء وُجد لها عنصر مطابق في المجموعة اليمنى (زي الموظفين) أو لأ. ولو مفيش، بيرجع null
.
تعريف الكائنات:
public class Employee
{
public int ID { get; set; }
public string Name { get; set; }
public int DepartmentID { get; set; }
}
public class Department
{
public int ID { get; set; }
public string DeptName { get; set; }
}
البيانات:
List<Employee> employees = new List<Employee>()
{
new Employee() { ID = 1, Name = "John", DepartmentID = 1 },
new Employee() { ID = 2, Name = "Moin", DepartmentID = 1 },
new Employee() { ID = 3, Name = "Bill", DepartmentID = 2 },
new Employee() { ID = 4, Name = "Ram", DepartmentID = 2 },
new Employee() { ID = 5, Name = "Ron", DepartmentID = 3 }
};
List<Department> departments = new List<Department>()
{
new Department(){ ID = 1, DeptName = "IT"},
new Department(){ ID = 2, DeptName = "HR"},
new Department(){ ID = 3, DeptName = "Finance"},
new Department(){ ID = 4, DeptName = "Admin"}
};
Left Outer Join باستخدام Query Syntax:
var leftOuterJoin = from dept in departments
join emp in employees
on dept.ID equals emp.DepartmentID into empGroup
from emp in empGroup.DefaultIfEmpty()
select new
{
Department = dept.DeptName,
Employee = emp != null ? emp.Name : "No Employee"
};
Left Outer Join باستخدام Method Syntax:
var leftOuterJoin = departments
.GroupJoin(employees,
dept => dept.ID,
emp => emp.DepartmentID,
(dept, empGroup) => new { dept, empGroup })
.SelectMany(
x => x.empGroup.DefaultIfEmpty(),
(x, emp) => new
{
Department = x.dept.DeptName,
Employee = emp != null ? emp.Name : "No Employee"
});
الناتج:
Department: IT, Employee: John
Department: IT, Employee: Moin
Department: HR, Employee: Bill
Department: HR, Employee: Ram
Department: Finance, Employee: Ron
Department: Admin, Employee: No Employee
ملاحظات:
GroupJoin
+DefaultIfEmpty()
هما الأساس لتنفيذ Left Join في LINQ.- تقدر تغير "No Employee" لأي قيمة افتراضية تناسب مشروعك.
- النتيجة دايمًا بترجع كل عناصر القسم، حتى لو مفيش موظفين فيه.
تعليقات
إرسال تعليق