讀書筆記 C# Linq查詢之group關鍵字淺析


在C#中,自從有了Linq查詢表達式后,程序員對可被迭代的序列或列表執行一系列的篩選、排序、過濾、分組、查詢等操作。本文章所要講述的是group關鍵字。

Linq查詢表達式,是以from關鍵字開頭,以select或group關鍵字結尾,它們之中可以插入where、orderby、join、let甚至附加的from子句。

group子句返回的是一個IGrouping<TKey,TElement>對象序列,請注意,是對象序列,而不是單個對象。由於group查詢產生的IGrouping<TKey,TElement>實質上是列表的列表。因此必須使用嵌套的foreach循環來訪問每一組的各個子項。外部循環可以訪問每個組的Key,內部循環可以訪問每個組的子項。

每個組的Key可以是任何類型,如字符串、用戶自定義的對象或其他。

可以用如下代碼來對序列進行分組:

//不排序的直接分組
var
cityGroup = from city in cities group city by city.Name;
//通過每組的Key排序的分組
var cityGroup = from city in cities
                //先通過每個城市的名稱來分組,每組的子項就是group關鍵字后面的city對象實例
 group city by city.Name
                //接着將該組賦給一個變量g
 into g
                //然后就可以通過g的Key去排序,g.Key就是by關鍵字后面的那個參數,即city.Name
 orderby g.Key
                //最后選中該組
                select g

 

//自定義group的每個子項
var cityGroup = from city in cities
//注意,by關鍵字后面的參數 一定要和 group關鍵字后面的參數 有一定的關聯,否則無法進行分組 group
new{city.Name,city.PeopleCount,SomeParam="自定義"} by city.Name

 可以用嵌套的foreach循環來獲取每個子項。每個子項其實就是group關鍵字后面的對象,如city。

foreach(var theCities in cityGroup){
    //首先獲取每個組的Key,在分組時,by后面的那個參數city.Name
    Console.WriteLine("每個組的Key:{0}",theCities.Key);

    //接着再次循環,獲取每個組的子項,即group后面的那個參數city對象
    foreach(var city in theCities){
       Console.WriteLine("城市名稱:{0}",city.Name);
       Console.WriteLine("總人數:{0}",city.PeopleCount);
   }      
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM