如何在字典中创建LINQ in LINQ

时间:2017-10-25 18:47:36

标签: c# linq dictionary

我正在学习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());

1 个答案:

答案 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);