一、Group的作用
1、Group字句把select的对象根据一些标准进行分组。
2、从查询表达式返回的对象是从查询中枚举分组结果的可枚举类型。
3、每一个分组由一个叫做键的字段区分。
4、每一个分组本身是可枚举类型并可以枚举它的项。
二、LINQ表达式
Group object by field
实例:Student.cs
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace LINQDemoWinForm 8 { 9 class Student 10 { 11 public int ID { get;set;} 12 public string SName { get; set; } 13 public int Age { get; set; } 14 public string Country { get; set; } 15 } 16 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 private void button3_Click(object sender, EventArgs e) 2 { 3 //初始化Student数组 4 Student[] arrStu = new Student[]{ 5 new Student{ID=1,SName="zhangsan",Age=20,Country="China"}, 6 new Student{ID=2,SName="lisi",Age=21,Country="Japan"}, 7 new Student{ID=3,SName="wangwu",Age=23,Country="China"}, 8 new Student{ID=4,SName="liuliu",Age=24,Country="American"}, 9 }; 10 //方式一、使用LINQ表达式来进行分组 11 //var query = from stu in arrStu 12 // group stu by stu.Country; 13 //方式二、使用LINQ标准查询运算符来进行分组 14 //方式一和二的作用是等价的 15 var query = arrStu.GroupBy(s => s.SName); 16 17 StringBuilder sbRes = new StringBuilder(); 18 //打印 19 foreach (var item in query) 20 { 21 sbRes.AppendFormat("Country:{0}",item.Key);//每一个分组有一个Key值 22 sbRes.AppendLine(); 23 foreach (var s in item) 24 { 25 sbRes.AppendFormat(" SName:{0},Age:{1}", s.SName, s.Age); 26 sbRes.AppendLine(); 27 } 28 } 29 MessageBox.Show(sbRes.ToString()); 30 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 private void button3_Click(object sender, EventArgs e) 2 { 3 //初始化Student数组 4 Student[] arrStu = new Student[]{ 5 new Student{ID=1,SName="zhangsan",Age=20,Country="China"}, 6 new Student{ID=2,SName="lisi",Age=21,Country="Japan"}, 7 new Student{ID=3,SName="wangwu",Age=23,Country="China"}, 8 new Student{ID=4,SName="liuliu",Age=24,Country="American"}, 9 }; 10 //方式一、使用LINQ表达式来进行分组 11 var query = from stu in arrStu 12 group stu.SName by stu.Country; 13 //方式二、使用LINQ标准查询运算符来进行分组 14 //方式一和二的作用是等价的 15 //var query = arrStu.GroupBy(s => s.SName, s => s.SName);//重载方法,第二个参数是Func<TSource, TElement> elementSelector 选择的字段 16 17 StringBuilder sbRes = new StringBuilder(); 18 //打印 19 foreach (var item in query) 20 { 21 sbRes.AppendFormat("Country:{0}",item.Key);//每一个分组有一个Key值 22 sbRes.AppendLine(); 23 foreach (var s in item)//这边的item的类型为IEnumerable<string>而不是上例中的IEnumerable<Student> 24 { 25 sbRes.AppendFormat(" SName:{0}", s); 26 sbRes.AppendLine(); 27 } 28 } 29 MessageBox.Show(sbRes.ToString()); 30 }