2014-04-29 235 views
2

我有以下模式:LINQ Query創建詞典詞典

ParentKey | Key |值

1  A  3 
    1  B  5 
    1  C  6 
    2  A  4 
    2  D  8 

我得到這個作爲IQueryable<MyObject>

MyObject { 
    public int ParentKey{get;set;} 
    public String Key{get;set;} 
    public int Value{get;set;} 
} 

我願把它變成字典的解釋,其中ParentKey是父字典的關鍵,關鍵是其中的關鍵兒童字典。我目前正在循環中做這個,但我想看看如何使用LINQ來完成。

我保證特定父鍵中的鍵總是唯一的,所以不需要擔心或檢查重複的鍵。

我如何寫一個LINQ查詢將由ParentKey首先把這個數據變成

Dictionary<int, Dictionary<string, int>> 
+0

,你開始是什麼類型? – i3arnon

+0

@ I3arnon我編輯我的帖子以反映數據 – sbenderli

回答

11

您需要組名單:

list.GroupBy(l => l.ParentKey) 
    .AsEnumerable()  // to shift from IQueryable to IEnumerable and hydrate the results 
    .ToDictionary(g => g.Key, g => g.ToDictionary(gg => gg.Key, gg => gg.Value)); 
+1

如果源是IQueriable(如問題所示),您希望在數據庫級執行第一個組,然後在ToDictionary之前執行AsEnumerable。和-1 bc。您的第二個ToDictionary呼叫將在重複鍵上失敗 –

+2

@AZ OP特別聲明*無需擔心或檢查重複鍵* – jnovo

+0

@AZ。它是一個IQueryable,我想將此查詢轉換爲ToDictionaryAsync,但是他的答案是有效的,因爲我提到了鍵確保對給定的父鍵是唯一的。 – sbenderli