我正在尝试使用LINQ来查询以下实体数据模型
基于此db模型
我希望能够根据ProductFacets.FacetTypeId提取产品列表。
通常,我会使用连接,这不会是一个问题,但我不太明白如何在Entity DataModel下查询多对多表。
这是一个示例sql查询:
select p.Name, pf.FacetTypeId from Products p
inner join ProductFacets pf on p.ProductId = pf.ProductId
where pf.FacetTypeId in(8, 12)
答案 0 :(得分:1)
假设EF 4:
var facetIds = new [] { 8, 12 };
var q = from p in Context.Products
where p.FacetTypes.Any(f => facetIds.Contains(f.FacetTypeId))
select p;
答案 1 :(得分:1)
在EF中(假设映射正确完成),几乎没有使用过连接;而是使用导航属性。
您的原始SQL返回带有重复Name条目的元组。使用LINQ,它通常更容易 将查询“塑造”为非元组结果。
以下内容应与SQL相同,而不是返回具有重复名称的(Name,FacetTypeId)对,它将返回一个具有Name和一系列FacetTypeIds的类型:
var facetIds = new [] { 8, 12 };
var result = from p in db.Products
select new
{
p.Name,
FacetTypeIds = from pf in p.FacetTypes
where pf.FacetTypeId == 8 || pf.FacetTypeId == 12
select pf.FacetTypeId,
};