【发布时间】:2016-12-06 09:31:20
【问题描述】:
我有两个GroupBy的结果:
IEnumerable<IGrouping<long, MyClass>> result1 = ...;
IEnumerable<IGrouping<long, MyClass>> result2 = ...;
我想把它们组合成一个序列。 result2 中的某些元素可能具有 IGrouping 键,它们也是 result1 中的键。所以标准的Enumerable.Concat 不起作用:
IEnumerable<IGrouping<long, MyClass>> result = result1.Concat(result2);
具有相同键的项目在结果序列中被提及两次。显然我需要一个特殊的Concat 来为IGrouping<TKey, TSource> 像这样:
public static IEnumerable<IGrouping<TKey, TSource>> Concat<TSource, TKey>
(this IEnumerable<IGrouping<TKey, TSource>> first,
IEnumerable<IGrouping<TKey, TSource>> second)
我可以取消组中的所有元素并重新组合它们,但这当然是一种浪费。
我看过source code of Enumerable.GroupBy。该方法创建一个 GroupedEnumerable 对象,该对象将在枚举 GroupedEnumerable 后立即创建一个 Lookup 对象。
我应该做类似的事情,还是有更好(更容易掌握)的方法?
【问题讨论】: