2012-04-04 6 views
2

私はDiscountableObjectというリストを持っています。リスト内の各アイテムには、Discountsコレクションがあります。私が必要とするのは、すべてのDiscoubtableObjectsに共通する割引のリストです。LINQは交差しますが、結果を新しいリストに追加します

コード:IntersectionOfDiscountsにより、第一審では空であるため、

List<Discount> IntersectionOfDiscounts = new List<Discount>(); 
foreach(var discountableItem in DiscoutableObject) 
{ 
    IntersectionOfDiscounts = IntersectionOfDiscounts.Intersect(discountableItem.Discounts);  
} 

これは間違いなく、空のリストを返します。

私が望むのは、DiscountableObjectの項目1を取って、それをDiscountableObjectの次の項目と比較するなどです。

私がやっていることは間違っていることを知っています。私は交差点と同時にリストに追加しています...しかし、それ以外はどうやってバッフルですか?

どうすればこの問題を回避できますか?

+0

...

var intersection = discountableObject .Select(discountableItem => discountableItem.Discounts) .Aggregate((current, next) => current.Intersect(next).ToList()); 

があなたの6分の締め切りを逃したが、私はとにかくそれが好き出力は? –

答えて

4

空リストではなく、最初のディスカウントリスト(複数ある場合)に初期化するIntersectionOfDiscountsまた、 'foreach'ループの最初の項目をスキップすることもできます。

// add check to ensure at least 1 item. 
List<Discount> IntersectionOfDiscounts = DiscoutableObject.First().Discounts; 
foreach(var discountableItem in DiscoutableObject.Skip(1)) 
{ 
    IntersectionOfDiscounts = IntersectionOfDiscounts.Intersect(discountableItem.Discounts);  
} 
+0

これよりもエレガントな方法が必要です...しかし、それはうまくいくでしょう:) – Rawling

+0

N Enumerables(つまりEnumerableのEnumerable)に交差を実行したIntersectの新しいIEnumerable拡張を作成することができますこれはしばしば十分でした。 – Servy

+0

Duh!私は今、馬鹿のように感じる!より良いものがない限り、答えは6分で受け入れられるとマークします。ありがとう! – Magic

3

おそらくもっとエレガントな方法:あなたの例にいくつかのテストデータを追加し、あなたが望むものを提供について、どのように

+0

マイク:6分の締め切りは私のものではありませんでしたが、そうです;-)次回は... – Magic

関連する問題