zoukankan      html  css  js  c++  java
  • linq GroupBy 多字段分组

    /// <summary>要查询的对象</summary>
    class Employee {
       public int ID { get;set; }
       public string FName { get; set; }
       public int Age { get; set; }
       public char Sex { get; set; }
    }
    // 先造一些数据
    List<Employee> empList = new List<Employee>();
    empList.Add(new Employee() {
       ID = 1, FName = "John", Age = 23, Sex = 'M'
    });
    empList.Add(new Employee() {
       ID = 2, FName = "Mary", Age = 25, Sex = 'F'
    });
    
    empList.Add(new Employee() {
       ID = 3, FName = "Amber", Age = 23, Sex = 'M'
    });
    empList.Add(new Employee() {
       ID = 4, FName = "Kathy", Age = 25, Sex = 'M'
    });
    empList.Add(new Employee() {
       ID = 5, FName = "Lena", Age = 27, Sex = 'F'
    });
    
    empList.Add(new Employee() {
       ID = 6, FName = "Bill", Age = 28, Sex = 'M'
    });
    
    empList.Add(new Employee() {
       ID = 7, FName = "Celina", Age = 27, Sex = 'F'
    });
    empList.Add(new Employee() {
       ID = 8, FName = "John", Age = 28, Sex = 'M'
    });
    接下来的做法是:
    
    // 实现多key分组的扩展函数版本
    var sums = empList
             .GroupBy(x => new { x.Age, x.Sex })
             .Select(group => new {
                Peo = group.Key, Count = group.Count()
             });
    foreach (var employee in sums) {
       Console.WriteLine(employee.Count + ": " + employee.Peo);
    }

    断点调试的结果是:

    输出结果是

    下面等同的linq的写法如下:

                var sums2 = from emp in empList
                            group emp by new { emp.Age, emp.Sex } into g
                            select new { Peo = g.Key, Count = g.Count() };
                foreach (var employee in sums)
                {
                    Console.WriteLine(employee.Count + ": " + employee.Peo);
                }

    总结:多key分组是一种一维的分组,不是组内分组,多个key完全相同时,即为一组,只要有一个key不同,不为一组

  • 相关阅读:
    Java基础-IO流对象之字节流(Stream)
    Java基础-IO流对象之File类
    Java基础-集合的嵌套
    rsync命令的基本使用
    java基础-Map集合
    Java基础-Collection子接口之Set接口
    Java基础-Collection子接口之List接口
    Java基础-泛型
    Unity4.3 bug GetChild顺序错乱
    Windows系统上的.Net版本和.NETFramework的C#版本
  • 原文地址:https://www.cnblogs.com/tianyang1027/p/13931811.html
Copyright © 2011-2022 走看看