2009-09-27 19 views
8

2つの変数ILookupがあります。私はUnionやConcatを使って値を結合し、その結果を同じ型の第3の変数に代入したいと思っていました。 UnionとConcatの両方がIGroupingを返します。 IGroupingをILookupに変換するのは簡単ではありませんが、私はできません! :-(IGroupingはKeyだけを公開しているので、Lookupの2番目のパラメータに苦労しています....どんな助けも大いにありがとうございます。LINQ IGroupingからLookupへの変換

答えて

9

私は、まずシーケンスを平坦化して使用する必要があると思いますToLookup

2つのデリゲートかかり SelectManyの形式使用
var lookup = first.Concat(second) 
        .SelectMany(group => group, 
           (group, item) => new { Key = group.Key, 
                Item = item }) 
        .ToLookup(x => x.Key, x => x.Item); 

一コレクションに元の配列内のアイテムを変換する、別の元のコレクション内のアイテム(すなわちグループ)を取ると返されたコレクション内のアイテム(つまり、そのグループのキーと一致するアイテム)を使用して、結果アイテムに到達することができます。これは、キーを使用してアイテムのシーケンスにグループ化をフラット化する最も簡単な方法です。

上記はテストされていないため、完全に間違っている可能性があります。それはまた比較的非効率的です... Lookupのインスタンスを直接構築する方法がないことは残念です。もちろん、自分でILookupを実装することもできます。

関連する問題