LINQ GroupBy

LINQ GroupBy

دالة GroupBy في LINQ تُستخدم لتجميع البيانات حسب مفتاح معين (زي مثلاً فرع الطالب Branch)، وبتشتغل زي GROUP BY في SQL.



تعريف الكلاس:


public class Student
{
    public int StudentID { get; set; }
    public string Name { get; set; }
    public string Branch { get; set; }
}


مصدر البيانات:


List<Student> studentList = new List<Student>()
{
    new Student() { StudentID = 1, Name = "John", Branch = "CSE" },
    new Student() { StudentID = 2, Name = "Steve", Branch = "CSE" },
    new Student() { StudentID = 3, Name = "Bill", Branch = "ECE" },
    new Student() { StudentID = 4, Name = "Ram", Branch = "EEE" },
    new Student() { StudentID = 5, Name = "Ron", Branch = "CSE" },
    new Student() { StudentID = 6, Name = "Chris", Branch = "ECE" },
    new Student() { StudentID = 7, Name = "Rob", Branch = "EEE" }
};


GroupBy باستخدام Method Syntax:


var GroupByBranch = studentList.GroupBy(s => s.Branch);

foreach (var group in GroupByBranch)
{
    Console.WriteLine(group.Key + " - " + group.Count());
    foreach (var student in group)
    {
        Console.WriteLine("  " + student.Name);
    }
}


GroupBy باستخدام Query Syntax:


var GroupByBranch = from student in studentList
                    group student by student.Branch;

foreach (var group in GroupByBranch)
{
    Console.WriteLine(group.Key + " - " + group.Count());
    foreach (var student in group)
    {
        Console.WriteLine("  " + student.Name);
    }
}


GroupBy + ترتيب حسب الفرع:


var GroupByBranch = studentList
    .GroupBy(s => s.Branch)
    .OrderBy(g => g.Key);


GroupBy + فلترة حسب عدد العناصر:


var GroupByBranch = studentList
    .GroupBy(s => s.Branch)
    .Where(g => g.Count() > 2);


المخرجات:


CSE - 3  
  John  
  Steve  
  Ron  
ECE - 2  
  Bill  
  Chris  
EEE - 2  
  Ram  
  Rob  


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

  • النتيجة من GroupBy بتكون من نوع IGrouping<TKey, TElement>.
  • كل مجموعة فيها مفتاح (Key) يمثل قيمة التجميع، والعناصر اللي بتقع تحته.
  • تقدر تطبّق عمليات تانية زي Select أو OrderBy على النتائج.


تعليقات

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

C# - Arrays

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

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