Looking at the profiler, I see a few differences. The second query, which uses include , actually returns data from the associated CountryCodes secondary table. This part makes sense to me. However, I do not understand why this request has two joins. First, it performs a regular internal join between CountryCodes and CountyCodeTypes (by foreign key), which, I think, will be sufficient to return everything that is required to include . However, then it performs another outer join. Why?
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;
resulting 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 , , .