2010-07-21 47 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, 
      };