首页 > 代码库 > Linq基于两个属性的分组
Linq基于两个属性的分组
1、需求
我们看下面的定义
#region 学生类 /// <summary> /// 学生类 /// </summary> class Student { /// <summary> /// ID /// </summary> public string ID { get; set; } /// <summary> /// 姓名 /// </summary> public string Name { get; set; } /// <summary> /// 分数 /// </summary> public float Score { get; set; } /// <summary> /// 科目 /// </summary> public string Subject { get; set; } } #endregion
我们实例化一组数据
//实例化一组数据 List<Student> list = new List<Student>() { new Student{ ID="00000001", Name="马良", Subject="数学", Score=100}, new Student{ ID="00000001", Name="马良", Subject="语文",Score=99}, new Student{ ID="00000001", Name="马良", Subject="物理", Score=95}, new Student{ ID="00000003", Name="马青", Subject="数学", Score=100}, new Student{ ID="00000003", Name="马青", Subject="语文",Score=80}, new Student{ ID="00000003", Name="马青", Subject="物理", Score=95}, };
将list按照ID和name分组,并求分数的和。
2、解决方案
通常的解决解决方案时排序两次,先用id排一次,再用Name排一次。
今天我们采用一种新的方式。采用匿名对象来存储id,name的对象。具体实现方案如下
//按照两个字段进行分组 var group = from item in list group item by new { item.ID, item.Name } into caca select new { key = caca.Key, sum = caca.Sum(it => it.Score) }; //将分组数据打印出来 foreach (var item in group) { Console.WriteLine("{0},{1}->{2}", item.key.ID, item.key.Name, item.sum); } Console.ReadKey();
解读上面的代码,将new { item.ID, item.Name }设定为key,进行检索。
大功告成
下载代码
Linq基于两个属性的分组
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。