zoukankan      html  css  js  c++  java
  • LINQ技巧:如何通过多次调用GroupBy实现分组嵌套

    using System;
    using System.Linq;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            public class S
            {
                public int Year;
                public int Month;
                public int Day;
            }
            
            static void Main(string[] args)
            {
                var m = new []{
                    new S{Year = 2000, Month = 1, Day = 10},
                    new S{Year = 2000, Month = 2, Day = 10},
                    new S{Year = 2010, Month = 1, Day = 1},
                    new S{Year = 2010, Month = 2, Day = 1},
                    new S{Year = 2010, Month = 1, Day = 2},
                    new S{Year = 2010, Month = 2, Day = 2},
                    new S{Year = 2000, Month = 1, Day = 2},
                    new S{Year = 2000, Month = 2, Day = 2},
                };
    
                var q2 =
                    from s in m
                    group s by s.Year into YearGroup
                    select new
                    {
                        Year = YearGroup.Key,
                        MonthGroups =
                            from s2 in YearGroup
                            group s2 by s2.Month into MonthGroup
                            select new
                            {
                                Month = MonthGroup.Key,
                                Days =
                                    from s3 in MonthGroup
                                    orderby s3.Day
                                    select s3.Day
                            }
                    };
    
    
                var q = m.GroupBy(
                        s => s.Year,
                        (Year, YearGroup) => new
                        {
                            Year,
                            MonthGroups =
                                YearGroup.GroupBy(
                                    s2 => s2.Month,
                                    (Month, MonthGroup) => new
                                    {
                                        Month,
                                        Days = MonthGroup.OrderBy(s3 => s3.Day).Select(s3 => s3.Day)
                                    }
                                )
                        }
                    );
    
                foreach (var elem in q)
                //foreach (var elem in q2)
                {
                    Console.WriteLine("Year = {0}", elem.Year);
                    foreach (var elem2 in elem.MonthGroups)
                    {
                        Console.WriteLine("	Month = {0}", elem2.Month);
                        foreach (var day in elem2.Days)
                            Console.WriteLine("		Day = {0}", day);
                    }
                }
            }
        }
    }
    //Year = 2000
    //        Month = 1
    //                Day = 2
    //                Day = 10
    //        Month = 2
    //                Day = 2
    //                Day = 10
    //Year = 2010
    //        Month = 1
    //                Day = 1
    //                Day = 2
    //        Month = 2
    //                Day = 1
    //                Day = 2
  • 相关阅读:
    双目对物体定位
    七个不变特征识别
    bmp和opencv格式转换
    职业规划
    input disp fprintf用法
    多线程
    访问权限
    机器人运动学仿真
    MOTOCOM32运动控制器编程
    回调函数以及钩子函数的概念
  • 原文地址:https://www.cnblogs.com/sjqq/p/6899319.html
Copyright © 2011-2022 走看看