2017-02-16 75 views
0

我有一個數據庫表,其中包含客戶發送的每個SMS的條目。它看起來是這樣的:在LINQ中使用GroupBy

CustomerId SentBy SentTo SentDate 

我想創建一個報告,列出每個客戶發送短信的總量,使用LINQ(最好是一口流利的語法)

var smses = smsTable.GroupBy(x => x.CustomerId); 

我不是很但是,確實如何遍歷結果。我想要以下輸出:

CustomerId SmsCount 
---------------------- 
1234  1756 
100   333 

我很感激任何幫助!

回答

2

根據MSDN,所述的GroupBy返回IEnumerable<IGrouping<TKey, TElement>>並且每個IGrouping對象包含 集合類型TElement和密鑰的對象。

這意味着你可以得到分組項目的價值將等於Key和每個密鑰將與一個集合相關聯。在你的情況下,你必須得到鑰匙以及每組中的物品計數。爲此,可以使用下面的代碼。

var smses = smsTable.GroupBy(x => x.CustomerId) 
        .Select(y => new 
           { 
            CustomerId = y.Key, 
            smsCount = y.Count() 
           }); 
+1

謝謝,像一個魅力工作! :) – msk

1

嘗試這樣做:

var smses = smsTable.GroupBy(x => x.CustomerId).Select(group => 
         new 
         { 
          CustomerId = group.Key, 
          SmsCount = group.Count() 
         }); 

希望它能幫助!