EF:使用include时是否包含外表的外表?

时间:2016-12-09 14:35:06

标签: sql sql-server entity-framework linq

Table1引用Table2Table2引用Table3

查询:

x.Table1.Include(x=> x.Table2)
  .Where(x=> x.something == 1).Select(x=> new{
     T2Model = x.Table2.Select(y=> new{
          T3Val = y.Table3.val
     })
}).ToList()

Include(x=> x.Table2)会确保val来自Table3而不会出现问题吗?

1 个答案:

答案 0 :(得分:2)

如果您删除了Include来电,那么您的查询应该有效:

x.Table1
  .Where(x=> x.something == 1).Select(x=> new{
     T2Model = x.Table2.Select(y=> new{
          T3Val = y.Table3.val
     })
}).ToList();

您的预测确保将val加载Table3,因为您的Linq to Entities查询将在稍后转换为sql,并且由于您在{{{ 1}},Linq提供者将扣除它需要做两个内部联接来进行该投影。

如果您没有使用相关属性进行投影并且想要加载它们(禁用延迟加载),那么请使用Select扩展方法:

Include