zoukankan      html  css  js  c++  java
  • 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,进行检索。

    大功告成

    下载代码

  • 相关阅读:
    估算并发用户数公式,性能测试估算
    jmeter 环境部署、数据库设置、分布式设置、多网卡配置等随笔
    JMETER 不同线程组 变量值 的参数传递
    sar命令性能分析
    系统性能分析思路
    数据库基本操作Day1
    装饰器

    复杂的用户行为逻辑
    运行逻辑
  • 原文地址:https://www.cnblogs.com/sexintercourse/p/5785451.html
Copyright © 2011-2022 走看看