2010-07-28 33 views
1

使用兩個具有一對多關係的表(如Make - > Model),如何在IQueryable函數中返回Make with limited Model children?LINQ to Entities - 限制包含表

當我將「凱美瑞」作爲變量傳遞時,我想要找回只有名爲「凱美瑞」的孩子的豐田製造商,而不是所有的孩子。基本上,我想重新創建SQL語句:

SELECT 
    MakeName, 
    ModelName 
FROM 
    Make 
    LEFT OUTER JOIN Model ON Model.MakeId = Make.MakeId 
WHERE 
    Model.ModelName = 'camry' 

到目前爲止,LINQ聲明是這樣的:

return this.ObjectContext.Make 
    .Include("Model") 
    .Where(make => make.Model.ModelName.Equals("camry") 

這顯然在語法上不正確的,因爲。型號在where子句中是一個實體集合,沒有.ModelName屬性。

如何限制包含的表格?這在LINQ to Entities中可能嗎?

回答

1

注意,這是從我的頭頂,我沒有刻意去編這樣的東西可能有點過:

return this.ObjectContext.Make.Include("Model") 
    .Where(make => make.Models.Any(model => model.ModelName == "camry")) 

另外請注意,我想作將有「模特」不是「型號」

編輯:

我沒有正確理解這個問題。這裏是你想要的查詢:

return this.ObjectContext.Model.Include("Make") 
    .Where(model => model.ModelName == "camry") 
+0

這似乎只要其中的一個被稱爲「凱美瑞」返回所有車型,並沒有模式,如果沒有的他們被稱爲「凱美瑞」。 – Marcus 2010-07-28 21:26:36

+0

@馬庫斯,對不起,誤解了這個問題。查看我的更新。 – tster 2010-07-29 11:50:05

0

這應該工作以及:

from make in ctx.Makes 
from model in make.Models 
where model.Name == "camry" 
select new 
{ 
    Make = make, 
    Model = model 
}