2

我正在尝试使用它的一些嵌套属性来过滤 IEnumerable。

我已经绞尽脑汁,但找不到这个查询的解决方案。事实上,我不知道这是否可能。

它的结构是这样的

T是一个Deal 一个Deal有一个Subcategories的集合(这个集合可能是空的)一个Subcategory有一个SubcategoryId

我希望能够选择 Deals 是否具有传递给方法的 SubcategoryId = 参数。

4

2 回答 2

5
public IEnumerable<Deal> FindDeals(IEnumerable<Deal> source, int subCategoryId)
{    
    return source.Where(d => d.Subcategories.Any(s => s.Id == subCategoryId));
}
于 2012-08-25T09:53:41.953 回答
4

听起来您想用来Enumerable.Any选择任何子类别都是您想要的交易:

var foo = deals.Where(deal => deal.Subcategories.Any(sc => sc.Id == parameter));

请注意,如果deal.Subcategories是一个空集合,这很好- 但如果它是一个空引用,那么它会爆炸,你需要:

var foo = deals.Where(deal => deal.Subcategories != null &&
                              deal.Subcategories.Any(sc => sc.Id == parameter));

...或修复它,使其永远不会deal.Subcategories 空,这通常会更可取:)

于 2012-08-25T09:53:38.760 回答