C# 反向链接查询

C# 反向链接查询,c#,linq,entity-framework,ef-code-first,C#,Linq,Entity Framework,Ef Code First,我正在使用asp.net 4.5.1 webform和EF codefirst; 有两类产品和类别;每个产品可以有许多类别。而且每个类别都可以有许多产品。当我想按用户选择所选类别中的所有产品时,我使用: List<int> CatId = new List<int>(); // add all the selected category Id to the CatId list. _db.Categories.Where(p => CatId.Contain

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

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);
List CatId=new List();
//将所有选定类别Id添加到CatId列表中。
_db.Categories.Where(p=>CatId.Contains(p.CategoryID)).SelectMany(p=>p.Products);
此代码适用于商品。我的问题是如何在反向视图中编写此查询? 让我进一步解释,这段代码是选择用户选择的类别,然后选择这些类别中的所有产品。(从类别视图) 但我想从产品视图中执行此操作,这意味着首先选择产品,然后检查产品是否属于该类别


我知道两个查询的结果是相同的。但我必须这样做

如果产品只有一个类别:

_db.Products.Where(p => CatId.Contains(p.Category.CategoryID));
如果产品可以有多个类别:

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

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

产品和类别在代码中是如何关联的?请显示您拥有的密钥和/或导航属性