我正在尝试使用它的一些嵌套属性来过滤 IEnumerable。
我已经绞尽脑汁,但找不到这个查询的解决方案。事实上,我不知道这是否可能。
它的结构是这样的
T是一个Deal 一个Deal有一个Subcategories的集合(这个集合可能是空的)一个Subcategory有一个SubcategoryId
我希望能够选择 Deals 是否具有传递给方法的 SubcategoryId = 参数。
public IEnumerable<Deal> FindDeals(IEnumerable<Deal> source, int subCategoryId)
{
return source.Where(d => d.Subcategories.Any(s => s.Id == subCategoryId));
}
听起来您想用来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
为空,这通常会更可取:)