程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> LINQ技巧:如何通過多次調用GroupBy實現分組嵌套

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

編輯:C#入門知識

[csharp] 
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); 
                }   www.2cto.com
            } 
        } 
    } 

//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 
作者:zwvista

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved