【发布时间】:2014-10-29 15:32:48
【问题描述】:
我正在使用 Linq 查询来获取客户及其可选的主要地址(客户可以有零个或多个地址)。 对象层次结构如下:
- 客户
- CustomerAddress(包含布尔属性 Main)
- 地址
- CustomerAddress(包含布尔属性 Main)
这是我正在使用的查询:
var qry = from customer cus in GetDBContext(c).customer
join cusadd in GetDBContext(c).customeraddress on new { cus_code = cus.cus_code, main = "1" } equals new { cus_code = cusadd.cus_code, main = cusadd.Main_addr } into grpcusadd
from cusadd in grpcusadd.DefaultIfEmpty()
join add in GetDBContext(c).address on new { addr_code = cusadd.Addr_Code } equals new { addr_code = add.Addr_Code } into grpadd
from add in grpadd.DefaultIfEmpty()
select new { cus, cusadd, add };
var customers = qry.ToList();
当我在数据库上(通过 EF)执行它时,它会正确返回值。 当我在内存对象的模拟上下文中执行它时,我得到一个 NullReferenceException: Object reference not set to an instance of an object。
我能够通过检查第二个左连接中的空值来修复此错误,因为第一个左连接返回空值:
join add in GetDBContext(c).address on new { addr_code = cusadd == null ? null : cusadd.Addr_Code } equals new { addr_code = add.Addr_Code } into grpadd
我找到了一个结论相同但没有解释的博文:http://technologycraftsmen.net/blog/2010/04/14/multiple-outer-joins-in-linq-to-sql/
为什么这个查询在本地对象而不是数据库上失败?
在 Linq 中,级联左外连接是否应该总是这样写?
感谢您的反馈!
【问题讨论】:
标签: c# linq entity-framework