2014-04-29 173 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