Linq 实体框架延迟加载子对象中的空属性

Linq 实体框架延迟加载子对象中的空属性,linq,entity-framework,entity-framework-4,Linq,Entity Framework,Entity Framework 4,将实体框架与延迟加载结合使用-在加载相关实体时遇到以下问题 是空的 假设我有两张表,分别是employee和employeedetails。假设在上述情况下,并非所有员工条目在employeedetails表中都有条目。 如果我想查一份员工名单 (from e in objectcontext.employees select new EmployeeEntity

将实体框架与延迟加载结合使用-在加载相关实体时遇到以下问题 是空的

假设我有两张表,分别是employee和employeedetails。假设在上述情况下,并非所有员工条目在employeedetails表中都有条目。 如果我想查一份员工名单

(from e in objectcontext.employees                                  
                              select new EmployeeEntity
                              {
                                  EmpID= e.EmployeeID,
                                  FirstName = e.FirstName,
                                  Address = e.employeedetails.Address
                              }).ToList();
EmployeeEntity是将结果填充到其中的数据类

如果返回的列表中有一名员工,则上述代码将中断 在表employeedetails中没有条目这是显而易见的,因为对于没有详细信息条目的客户,e.employeedetails将为空

重写上述查询的最佳方法是什么

这样的东西可以接受吗

(from e in objectcontext.employees                                  
                              select new EmployeeEntity
                              {
                                  EmpID= e.EmployeeID,
                                  FirstName = e.FirstName,
     Address = e.employeedetails  == null ? "" :    e.employeedetails.Address,
                              }).ToList();
我不清楚上述查询的效率-该语句是否会在DB级别执行空检查

我应该做一个显式的include吗

objectcontext.include("employeedetails")...

然后循环检查结果是否为空?

是的,此语句确实会在生成的SQL查询中执行空检查。最有可能的是,它只是一个
NVL
联合


这是您应该采用的方法。

是的,此语句确实会在生成的SQL查询中执行空检查。最有可能的是,它只是一个
NVL
联合


这是您应该采用的方法。

您是否在运行时实际遇到空引用异常?在类似的查询中(对可为null的引用对象使用select),我看到EF生成外部联接,并且引用的属性(
Address
在您的例子中)是
null
。是。我确实在运行时遇到了一个空引用——只是它们可能不在字符串字段上。在实际代码中,我从引用对象中检索了很多属性。我认为空中断可能在DateTime字段上。您是否在运行时实际遇到空引用异常?在类似的查询中(对可为null的引用对象使用select),我看到EF生成外部联接,并且引用的属性(
Address
在您的例子中)是
null
。是。我确实在运行时遇到了一个空引用——只是它们可能不在字符串字段上。在实际代码中,我从引用对象中检索了很多属性。我认为空中断可能在DateTime字段上。