今天的状况如下。
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表达式进行字典化重构。
答案 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));