C# EF忽略“急加载”;包括「;陈述

C# EF忽略“急加载”;包括「;陈述,c#,linq,entity-framework,C#,Linq,Entity Framework,我看到这个问题不断出现。当我通读答案时,下面的陈述很好地总结了常见的ish答案: 任何手动连接或投影都将更改查询的形状,并且不会使用Include - 好的,所以我决定用DbContext创建一个“hello world”示例EF代码第一个项目,用于测试该语句。我创建了以下查询: var result = from c in context.Customers.Include(i => i.Addresses) from a in c.Accounts where

我看到这个问题不断出现。当我通读答案时,下面的陈述很好地总结了常见的ish答案:

任何手动连接或投影都将更改查询的形状,并且不会使用Include
-

好的,所以我决定用DbContext创建一个“hello world”示例EF代码第一个项目,用于测试该语句。我创建了以下查询:

var result = 
    from c in context.Customers.Include(i => i.Addresses)
    from a in c.Accounts
    where a.ID > 4
    select c;
Include()语句应该可以工作,因为我显然满足了以下要求:(1)我没有使用匿名类型修改投影,(2)我没有手动处理连接

然而,它不起作用。此查询生成的SQL查询如下所示:

SELECT 
  [Extent1].[ID] AS [ID], 
  [Extent1].[Name] AS [Name]
  FROM  [dbo].[Customers] AS [Extent1]
  INNER JOIN [dbo].[Accounts] AS [Extent2] ON [Extent1].[ID] = [Extent2].[Customer_ID]
  WHERE [Extent2].[ID] > 4
如果在
帐户上删除联接和筛选,则正确生成include语句。为什么会这样

我还担心EF官方文档似乎没有解释何时使用Include()或何时不使用Include()的规则。我只是忽略了什么吗?

在某种程度上,通过使用
c.Accounts
指定第二个
from
语句,您是在“手动处理连接”

尝试以下查询,其上下文仅基于
客户
实体:

from c in context.Customers.Include( i => i.Addresses )
where c.Accounts.Any( a => a.ID > 4 )
select c