看着分析器,我看到了一些差異。使用的第二個查詢包括實際上將返回與輔助表CountryCodes相關的數據。這部分對我來說很有意義。但我不明白爲什麼這個查詢有兩個連接。首先它在CountryCodes和CountyCodeTypes(在外鍵上)之間進行常規的內連接,我認爲這足以返回包括所需的所有內容。然而,它然後做另一個外部聯接。爲什麼?這兩個LINQ查詢有什麼區別?
var query = from codes in base.context.CountryCodes
join codeTypes in base.context.CountryCodeTypes
on codes.CountryCodeTypeId equals codeTypes.CountryCodeTypeId
where codeTypes.CountryCodeTypeName == countryCodeType
select codes;
var query = from codes in base.context.CountryCodes.Include("CountryCodeType")
where codes.CountryCodeType.CountryCodeTypeName == countryCodeType
select codes;
產生的SQL:
FROM [dbo].[CountryCode] AS [Extent1]
INNER JOIN [dbo].[CountryCodeType] AS [Extent2] ON [Extent1].[CountryCodeTypeId] = [Extent2].[CountryCodeTypeId]
LEFT OUTER JOIN [dbo].[CountryCodeType] AS [Extent3] ON [Extent1].[CountryCodeTypeId] = [Extent3].[CountryCodeTypeId]
WHERE [Extent2].[CountryCodeTypeName] = @p__linq__0
而且,它是公平地說,我應該用在.include只有當我真正需要的外鍵表中的數據在我的結果來填充,否則,使用連接?換句話說,我不應該使用.Include作爲連接的手段,因爲導航屬性知道如何基於鍵來連接實體。
這不是你的問題的SQL是否由第一或第二的LINQ查詢生成非常清楚... – 2010-10-15 00:12:59