我有两个ILookup类型的变量。我想使用Union或Concat组合它们的值并将结果分配给相同类型的第三个变量。 Union和Concat都返回IGrouping。将IGrouping转换为ILookup一定很简单,但我不能这样做! :-( IGrouping暴露了Key,所以我正在努力寻找Lookup的第二个参数......任何帮助都会非常多,非常感激。
答案 0 :(得分:9)
我认为您需要首先展平序列,才能使用ToLookup
:
var lookup = first.Concat(second)
.SelectMany(group => group,
(group, item) => new { Key = group.Key,
Item = item })
.ToLookup(x => x.Key, x => x.Item);
使用SelectMany
的形式,它带有两个代表:一个用于将原始序列中的项目转换为集合,另一个用于将原始集合中的项目(即组)和项目中的项目转换为返回的集合(即与该组的键匹配的项)到达结果项。这是最简单的方法(我认为!)将分组展平为一系列带有键的项目。
以上未经过测试,因此可能完全错误。它的效率也相对较低......令人遗憾的是,无法直接构建Lookup
的实例。当然,您可以自己实施ILookup
。