反向链接查询

时间:2014-01-13 09:56:10

标签: c# linq entity-framework ef-code-first

我正在使用带有EF codefirst的asp.net 4.5.1 webform; 有两类产品和类别;每个产品可以有很多类别。每个类别都可以有很多产品。当我想按用户选择所选类别中的所有产品时,我使用:

List<int> CatId = new List<int>(); 
// add all the selected category Id to the CatId list.   
_db.Categories.Where(p => CatId.Contains(p.CategoryID)).SelectMany(p => p.Products);

此代码工作商品。我的问题是如何在反向视图中编写此查询? 让我解释一下,此代码选择用户选择的类别,然后选择这些类别中的所有产品。(从类别视图) 但我希望从产品视图中执行此操作,这意味着首先选择产品,然后检查该产品是否属于该类别。

我知道两个查询的结果是一样的。但我需要这样做。

1 个答案:

答案 0 :(得分:1)

如果产品只有一个类别:

_db.Products.Where(p => CatId.Contains(p.Category.CategoryID));

如果产品可以有多个类别:

_db.Products.Where(p => p.Categories.Any(c => CatId.Contains(c.CategoryID)));

还要考虑将类别ID列表重命名为categoryIds,以表明它是id的集合,而不是单个id。