C# LINQ查询以创建词典词典
我有以下模式: ParentKey | Key | ValueC# LINQ查询以创建词典词典,c#,linq,dictionary,C#,Linq,Dictionary,我有以下模式: ParentKey | Key | Value 1 A 3 1 B 5 1 C 6 2 A 4 2 D 8 我将此作为IQueryable 我想把它变成一个字典字典,其中ParentKey是父字典的键,key是子字典的键。我目前正在循环中完成这项工作,但我想看看如何使用LINQ完成这项工作 我保证特定父密钥中的密钥始终是唯一的,因此无需担心
1 A 3
1 B 5
1 C 6
2 A 4
2 D 8
我将此作为IQueryable
我想把它变成一个字典字典,其中ParentKey是父字典的键,key是子字典的键。我目前正在循环中完成这项工作,但我想看看如何使用LINQ完成这项工作
我保证特定父密钥中的密钥始终是唯一的,因此无需担心或检查重复的密钥
如何编写LINQ查询,将这些数据转换为
Dictionary<int, Dictionary<string, int>>
字典
您需要首先按照ParentKey
对列表进行分组:
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));
您从哪种类型开始?@I3arnon我编辑了我的帖子以反映数据如果源是iQuery(如问题所示),那么您希望在DB级别执行第一个group by,然后在编辑之前执行AsEnumerable。公元前1-1年。您的第二个ToDictionary调用将在复制时失败keys@AZOP明确表示,无需担心或检查副本keys@AZ. 这是一个IQueryable,我想将此查询转换为ToDictionaryAsync,但他的回答是有效的,因为我提到,对于给定的父键,这些键保证是唯一的。那么我的错了-1已删除。我仍然认为需要在目录中放置一个AsEnumerable()。@AZ
AsEnumerable()
added。
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));