使用LINQ将IEnumerable映射到ILookup的简洁方法

时间:2016-09-02 18:05:07

标签: c# .net linq

我几次发现自己的情况:我有一个IEnumerable<T>和一个函数map,它将T的实例映射到IEnumerable<U>。我想生成由该地图定义的ILookup<T, U>

这似乎是一个非常常见的用例,但我还没有找到一种简洁的方法来生成查找。特别是,enumT.ToLookup( t=>t, t=>map(t))生成ILookup<T, IEnumerable<U>>

1 个答案:

答案 0 :(得分:2)

在调用SelectMany之前,只需使用ToLookup将序列展平即可。

var lookup = sequence.SelectMany(key => Foo(key), (key, value) => new { key, value, })
    .ToLookup(pair => pair.key, pair => pair.value);