2013-07-24 46 views
0

我已經在C#中定義如下DTO對象:使用LINQ分組在記錄表

public class Record 
{ 
    public List<EventType> EventTypes { get; set; } 
} 

,並具有列表<記錄>填充,而事件類型之後被定義爲枚舉現在

public Enum EventType { 
    UNLOCK = 1, 
    LOCK = 2 
} 

我想做出與記錄清單類似的報告:

count  Name 
=====  ====== 
3   UNLOCK 
1   LOCK 

...通過使用(很可能是LINQ組)。制定這份清單的最佳方法是什麼?我假設我將不得不製作另一個將保存這些數據的DTO。

+1

你試過了什麼?你檢查過了嗎? http://www.codeproject.com/Articles/35667/How-to-Use-LINQ-GroupBy – seshuk

回答

3

根據你想擁有所產生的數據類型,可以使用以下兩種:

var result = records.SelectMany(x => x.EventTypes) 
        .GroupBy(x => x) 
        .ToDictionary(x => x.Key, x => x.Count()); 

var result = records.SelectMany(x => x.EventTypes) 
        .GroupBy(x => x) 
        .Select(x => new { Name = x.Key, Count = x.Count()); 

var result = records.SelectMany(x => x.EventTypes) 
        .GroupBy(x => x) 
        .Select(x => new YourType(x.Key, x.Count())); 

第一個將導致與事件類型是關鍵和其發生的數字典該列表作爲值。

第二個會導致一個匿名類型的枚舉,其中兩個屬性NameCount

第三個將導致YourType類型的枚舉,該類型將事件類型及其出現次數傳遞給其構造函數。

+1

'record'應該被'records.SelectMany(r => r.EventTypes)' – GolfWolf

+0

@ w0lf替換:事實上,謝謝。我不知怎麼讀了'List '。 –

+1

謝謝,第三項是我剛剛嘗試實現的:) – user576700