编程技巧:使用LINQ如何通过多次调用GroupBy实现分组嵌套

来源:互联网 发布:淘宝童装名片设计 编辑:程序博客网 时间:2024/05/16 05:41
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("\tMonth = {0}", elem2.Month);                    foreach (var day in elem2.Days)                        Console.WriteLine("\t\tDay = {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

原创粉丝点击