LINQ 和关联 - 何时需要 Include()?

LINQ and associations - When is an Include() required?

此 LINQ 按预期工作并带回与给定 Employee

关联的 Department 实体
Employees.Where(e => e.EmployeeId == 10).Select(e => new {e.Department})

然而,类似的 LINQ 表达式失败,表示 Department 为 null

Employees.Where(e => e.EmployeeId == 10).Department 

第一个 LINQ 语句能够确定 EmployeesDepartment 之间的关联,但第二个 LINQ 表达式不能。如果我在第二个 LINQ 示例中使用 Include("Department") 语句,那么它将起作用并且 Department 不会为空。

Employees.Include("Department").Where(e => e.EmployeeId == 10).Department

为什么第一个 LINQ 语句中不需要 Include("Department")?

第一个语句明确要求 Employee.Department 对象,并且只会 return 部门对象。发生的事情是 linq 构建一个 sql 内部加入部门 table.

的查询

第二个语句查询员工对象。 Linq 仅对 return 员工对象构建 sql 查询,并且由于您没有请求部门,因此它不会内部加入部门 table。在员工对象被 returned 之后。部门 属性 被调用,它是空的。 .Department 部分在 linq 生成 sql 查询和 returns 员工对象后调用。

使用 include,linq 将查询员工 table 并内部加入部门 table。这将 return 员工和 employee.department。

使用 select 是最好的方法,因为您 return 只需要您想要的。出于性能原因,通常应尽可能避免使用 include。