عملگرهای گروه بندی GroupBy و ToLookup
در زبان کوئری نویسی LINQ عملگر GroupBy دقیقا همان کاری را انجام می دهد که در کوئری SQL انجام می دهد. عملگر گروه بندی عناصر را بر اساس کلید مشخص شده گروه بندی می کند. گروه های ایجاد شده شامل یک نوع خاص از مجموعه هستند که اینترفیس IGrouping
عملگر | توضیحات |
GroupBy | این عملگر بر اساس کلید مشخص شده، گروه هایی از عناصر را باز می گرداند. |
ToLookup | این عملگر مشابه عملگر GroupBy است با این تفاوت که GroupBy با تاخیر اجرا می شود ولی ToLookup فورا اجرا می شود. |
عملگر GroupBy در سینتکس کوئری
در مثال زیر ما با استفاده از عملگر GroupBy دانش آموزان موجود در مجموعه را بر اساس سن گروه بندی می کنیم. در نتیجه دانش آموزانی که سن مشابه دارند در یک مجموعه قرار می گیرند:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | IList<Student> studentList = new List<Student>() { new Student() { StudentID = 1, StudentName = "John", Age = 18 } , new Student() { StudentID = 2, StudentName = "Steve", Age = 21 } , new Student() { StudentID = 3, StudentName = "Bill", Age = 18 } , new Student() { StudentID = 4, StudentName = "Ram" , Age = 20 } , new Student() { StudentID = 5, StudentName = "Abram" , Age = 21 } }; var groupedResult = from s in studentList group s by s.Age; //iterate each group foreach (var ageGroup in groupedResult) { Console.WriteLine("Age Group: {0}", ageGroup .Key); //Each group has a key foreach(Student s in ageGroup) // Each group has inner collection Console.WriteLine("Student Name: {0}", s.StudentName); } |
خروجی مثال فوق:
1 2 3 4 5 6 7 8 | AgeGroup: 18 StudentName: John StudentName: Bill AgeGroup: 21 StudentName: Steve StudentName: Abram AgeGroup: 20 StudentName: Ram |
عملگر GroupBy در سینتکس متد
در مثال زیر مجموعه دانش آموزان را با استفاده از متد افزودنی GroupBy و بر اساس سن گروه بندی کرده ایم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | IList<Student> studentList = new List<Student>() { new Student() { StudentID = 1, StudentName = "John", Age = 18 } , new Student() { StudentID = 2, StudentName = "Steve", Age = 21 } , new Student() { StudentID = 3, StudentName = "Bill", Age = 18 } , new Student() { StudentID = 4, StudentName = "Ram" , Age = 20 } , new Student() { StudentID = 5, StudentName = "Abram" , Age = 21 } }; var groupedResult = studentList.GroupBy(s => s.Age); foreach (var ageGroup in groupedResult) { Console.WriteLine("Age Group: {0}", ageGroup.Key); //Each group has a key foreach(Student s in ageGroup) //Each group has a inner collection Console.WriteLine("Student Name: {0}", s.StudentName); } |
خروجی مثال فوق:
1 2 3 4 5 6 7 8 | AgeGroup: 18 StudentName: John StudentName: Bill AgeGroup: 21 StudentName: Steve StudentName: Abram AgeGroup: 20 StudentName: Ram |
عملگر ToLookup
عملگر ToLookup مشابه عملگر GroupBy است با این تفاوت که GroupBy با تاخیر اجرا می شود ولی ToLookup فورا اجرا می شود. همچنین این عملگر فقط در سینتکس متد قابل استفاده است. مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | IList<Student> studentList = new List<Student>() { new Student() { StudentID = 1, StudentName = "John", Age = 18 } , new Student() { StudentID = 2, StudentName = "Steve", Age = 21 } , new Student() { StudentID = 3, StudentName = "Bill", Age = 18 } , new Student() { StudentID = 4, StudentName = "Ram" , Age = 20 } , new Student() { StudentID = 5, StudentName = "Abram" , Age = 21 } }; var lookupResult = studentList.ToLookup(s => s.age); foreach (var group in lookupResult) { Console.WriteLine("Age Group: {0}", group.Key); //Each group has a key foreach(Student s in group) //Each group has a inner collection Console.WriteLine("Student Name: {0}", s.StudentName); } |
هیچ نظری ثبت نشده است