LINQ学习——Group

一、Group的作用

      1、Group字句把select的对象根据一些标准进行分组

      2、从查询表达式返回的对象是从查询中枚举分组结果的可枚举类型

      3、每一个分组由一个叫做的字段区分。

      4、每一个分组本身是可枚举类型并可以枚举它的项。

二、LINQ表达式

     Group object by field

      实例:Student.cs

     

 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 }
View Code
 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         }
View Code
 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         }
View Code

 

posted @ 2017-03-31 20:23  cherish1024  阅读(1154)  评论(0编辑  收藏  举报