2010-07-21 90 views
0

我试图使用LINQ基于这个数据库模型查询以下实体数据模型 alt text
alt text与实体数据模型多到多个表LINQ查询

我想能够根据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) 

回答

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

在EF(假设映射正确地完成),加入是很少使用;导航属性被用来代替。

您的原始SQL返回一个带有重复名称条目的元组。使用LINQ,通常更容易 将查询“塑造”为非元组结果。

下应该是一样的SQL,而不是只返回反复名称(姓名,FacetTypeId)对,它会返回有一个名字和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, 
      };