LINQ Group Join

LINQ Group Join

في هذا الدرس هنتعلّم إزاي نستخدم Group Join في LINQ بلغة C#، سواء باستخدام Query Syntax أو Method Syntax.



ما هو Group Join؟

Group Join بيربط عنصر من مجموعة (زي Standard) بمجموعة عناصر من مجموعة تانية (زي الطلاب) بناءً على مفتاح مشترك.
وبيكون الناتج: Standard + مجموعة طلاب



تعريف الكائنات:


public class Student
{
    public int StudentID { get; set; }
    public string StudentName { get; set; }
    public int StandardID { get; set; }
}

public class Standard
{
    public int StandardID { get; set; }
    public string StandardName { get; set; }
}


البيانات:


List<Standard> standardList = new List<Standard>()
{
    new Standard(){ StandardID = 1, StandardName = "Standard 1"},
    new Standard(){ StandardID = 2, StandardName = "Standard 2"},
    new Standard(){ StandardID = 3, StandardName = "Standard 3"},
    new Standard(){ StandardID = 4, StandardName = "Standard 4"}
};

List<Student> studentList = new List<Student>()
{
    new Student() { StudentID = 1, StudentName = "John", StandardID = 1 },
    new Student() { StudentID = 2, StudentName = "Moin", StandardID = 1 },
    new Student() { StudentID = 3, StudentName = "Bill", StandardID = 2 },
    new Student() { StudentID = 4, StudentName = "Ram", StandardID = 2 },
    new Student() { StudentID = 5, StudentName = "Ron", StandardID = 3 }
};


Group Join باستخدام Query Syntax:


var groupJoinQuery = from std in standardList
                     join s in studentList
                     on std.StandardID equals s.StandardID into studentGroup
                     select new
                     {
                         StandardName = std.StandardName,
                         Students = studentGroup
                     };


Group Join باستخدام Method Syntax:


var groupJoinMethod = standardList
    .GroupJoin(studentList,
               std => std.StandardID,
               s => s.StandardID,
               (std, studentGroup) => new
               {
                   StandardName = std.StandardName,
                   Students = studentGroup
               });


عرض النتيجة:


foreach (var group in groupJoinMethod)
{
    Console.WriteLine("Standard: " + group.StandardName);
    foreach (var student in group.Students)
    {
        Console.WriteLine("  " + student.StudentName);
    }
}


الناتج المتوقع:


Standard: Standard 1  
  John  
  Moin  

Standard: Standard 2  
  Bill  
  Ram  

Standard: Standard 3  
  Ron  

Standard: Standard 4  
  (لا طلاب)


ملاحظات:

  • GroupJoin مثالي لربط الكائنات اللي بينهم علاقة واحد إلى متعدد.
  • لو مفيش طلاب في Standard معين، المجموعة هتكون فاضية مش null.
  • ممكن تستخدم groupJoin كخطوة في بناء تقارير معقدة أو صفحات عرض بيانات.


تعليقات

المشاركات الشائعة من هذه المدونة

C# - Arrays

Entity Framework - ما هو ORM؟ ونبذة عن Dapper وNHibernate

Entity Framework - مقدمة عن Entity Framework