我几次发现自己的情况:我有一个IEnumerable<T>
和一个函数map
,它将T
的实例映射到IEnumerable<U>
。我想生成由该地图定义的ILookup<T, U>
。
这似乎是一个非常常见的用例,但我还没有找到一种简洁的方法来生成查找。特别是,enumT.ToLookup( t=>t, t=>map(t))
生成ILookup<T, IEnumerable<U>>
。
答案 0 :(得分:2)
在调用SelectMany
之前,只需使用ToLookup
将序列展平即可。
var lookup = sequence.SelectMany(key => Foo(key), (key, value) => new { key, value, })
.ToLookup(pair => pair.key, pair => pair.value);