LINQ Cross Join

LINQ Cross Join

في هذا الدرس، سنتعلم كيفية تنفيذ Cross Join في LINQ بلغة C# باستخدام كل من Query Syntax و Method Syntax.



ما هو Cross Join؟

Cross Join يُنتج الضرب الديكارتي بين مجموعتين.
يعني لو عندك 3 طلاب و4 كورسات → الناتج = 12 صف.



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


public class Student
{
    public string StudentName { get; set; }
}

public class Course
{
    public string CourseName { get; set; }
}


البيانات:


List<Student> students = new List<Student>()
{
    new Student() { StudentName = "John" },
    new Student() { StudentName = "Moin" },
    new Student() { StudentName = "Bill" }
};

List<Course> courses = new List<Course>()
{
    new Course() { CourseName = "C#" },
    new Course() { CourseName = "SQL" },
    new Course() { CourseName = "LINQ" },
    new Course() { CourseName = "Azure" }
};


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


var crossJoinQuery = from student in students
                     from course in courses
                     select new
                     {
                         Student = student.StudentName,
                         Course = course.CourseName
                     };


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


var crossJoinMethod = students
    .SelectMany(student => courses,
                (student, course) => new
                {
                    Student = student.StudentName,
                    Course = course.CourseName
                });


الناتج:


John - C#
John - SQL
John - LINQ
John - Azure
Moin - C#
Moin - SQL
Moin - LINQ
Moin - Azure
Bill - C#
Bill - SQL
Bill - LINQ
Bill - Azure


شرح سريع:

  • Query Syntax: استخدمنا from داخل from لتكرار الكورسات لكل طالب.
  • Method Syntax: استخدمنا SelectMany وهو المقابل لـ Cross Join.
  • كل طالب طُبّق عليه كل كورس.


ملاحظات هامة:

  • لا يتطلب شرط ربط مثل Inner Join.
  • ينتج عدد كبير من الصفوف، فكن حذرًا مع البيانات الكبيرة.


تعليقات

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

C# - Arrays

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

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