Linq语法选择嵌套对象

时间:2012-08-25 09:51:15

标签: .net linq

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

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

它的结构是这样的

T 交易 交易包含子类别的集合(该集合可能为空) 子类别子类别

我希望能够选择交易,无论他们是否有传递给方法的SubcategoryId =参数。

2 个答案:

答案 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 永远不会为空,这通常更可取:)