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