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

    大功告成

    下载代码

  • 相关阅读:
    面试题-JAVA算法题
    分布式
    linux中文件描述符fd和struct file结构体的释放
    Linux字符设备驱动
    Linux内存地址管理概述
    mnist卷积网络实现
    【TensorFlow官方文档】MNIST机器学习入门
    FCN笔记
    datetime.timedelta
    tensorflow中的函数获取Tensor维度的两种方法:
  • 原文地址:https://www.cnblogs.com/sexintercourse/p/5785451.html
Copyright © 2011-2022 走看看