我正在学习LINQ查询并停留在一个地方。假设我有一个strongly typed datatable
,如下所示
idGroup idUnit Status
1 12 foo
1 13 bar
1 15 hello
2 12 nofoo
2 16 nohello
我想要如下结果:
int Generic List of int
1 12,13,15
2 12,16
更像是我想创建一个字典,但分组基于 idGroup 。
我的尝试:
Dictionary<int, List<int>> temp = Mydatatable.ToDictionary(p => p.idGroup, p => p.idUnit);
错误:上面的LINQ会返回<int>, <int>
,但我的预期结果是<int>, List<int>
。“
我想要以下内容:
Dictionary<int, List<int>> temp = Mydatatable.ToDictionary(p => p.idGroup,
p => p.idUnit.ToList());
答案 0 :(得分:3)
首先,错误是因为在您的ToDictionary
中,您指定的值是idUnit
,它是int
而不是List<int>
(例如写p => new List<int> { p.idUnit }
1}}将解决该错误)
然后在词典后输出GroupBy
然后ToDictionary
。否则,您将收到一个异常,说明字典中已存在给定的密钥。
var result = Mydatatable.GroupBy(key => key.idGroup, val => val.idUnit)
.ToDictionary(key => key.Key, val => val.ToList());
另一种选择是使用Lookup
代替Dictionary
,然后只使用
var result = Mydatatable.ToLookup(p => p.idGroup, p => p.idUnit);