我正在尝试使用它的一些嵌套属性来过滤IEnumerable。
我在每个方向都绞尽脑汁但却找不到这个查询的解决方案。事实上,我不知道这是否可能。
它的结构是这样的
T 是交易 交易包含子类别的集合(该集合可能为空) 子类别有子类别
我希望能够选择交易,无论他们是否有传递给方法的SubcategoryId =参数。
答案 0 :(得分:5)
public IEnumerable<Deal> FindDeals(IEnumerable<Deal> source, int subCategoryId)
{
return source.Where(d => d.Subcategories.Any(s => s.Id == subCategoryId));
}
答案 1 :(得分: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
永远不会为空,这通常更可取:)