編程技巧:使用LINQ如何通過多次調用GroupBy實現分組嵌套

來源:互聯網
上載者:User
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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.