Linq在多个(级联)左连接上查询NullReferenceException

 谭宏景 发布于 2022-12-14 19:12

我正在使用Linq查询来获取客户及其可选的主要地址(客户可以拥有零个或多个地址).对象层次结构如下:

顾客

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:对象引用未设置为对象的实例.

我能够通过在第二个左连接中检查空值来修复此错误,因为第一个左连接返回空值:

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中这样写吗?

感谢您的反馈意见!

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有