LINQ相交但将结果添加到新列表

时间:2012-04-04 15:27:01

标签: c# linq intersect

我有一个名为DiscountableObject的列表。列表中的每个项目依次具有折扣集合。我需要的是所有DiscoubtableObjects中常见的折扣列表。

代码:

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

这无疑将返回一个空列表,因为IntersectionOfDiscounts在第一个实例中为空。

我想要的是获取DiscountableObject的第1项,将其与DiscountableObject的下一项进行比较,依此类推。

我知道我要做的事情是错误的,因为我正在同时对列表进行交集和添加......但是另外有什么让我感到困惑的呢?

我该如何解决这个问题?

2 个答案:

答案 0 :(得分: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);    
}

答案 1 :(得分:3)

可能更优雅的方式:

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

错过了你的6分钟截止日期,但无论如何我都喜欢......