选择LINQ直接使用Dictionary

时间:2014-05-15 14:18:13

标签: c# linq dictionary

今天的状况如下。

IEnumerable<Beep>
  as = list.Where(e => e.Name == "A").Select(e => e.Property),
  bs = list.Where(e => e.Name == "B").Select(e => e.Property);
Dictionary<String, IEnumerable<Beep>> 
  = new Dictionary<String, IEnumerable<Beep>>()
    { { "A", as }, { "B", bs } };

我想知道如何在一个语句中直接从LINQ表达式进行字典化重构。

1 个答案:

答案 0 :(得分:4)

因为你得到IEnumerable<Beep>,所以你真的不想要ToDictionary(),而是ToLookup()所做的那样。

var result = list.ToLookup(x => x.Name, x => x.Property);

这将输出ILookup<string, Beep>,相当于Dictionary<String, IEnumerable<Beep>>

重要提示!这样做的一个空洞是生成的ILookup无法进一步修改以在以后添加更多项目,其中Dictionary<string, IEnumerable<Beep>>允许您在初始创建后添加更多项目。如果你想要一本字典,你需要做

var result = list.GroupBy(x=>x.Name)
  .ToDictionary(x=> x.Key, x=>x.Select(y=> y.Property));