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 语句能够确定 Employees
和 Department
之间的关联,但第二个 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。
此 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 语句能够确定 Employees
和 Department
之间的关联,但第二个 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。