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,进行检索。

大功告成

下载代码

 

posted on   漫思  阅读(2196)  评论(0编辑  收藏  举报

编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示