EF Core Linq分组查询:DefaultIfEmpty()为何无法正常工作?
解决EF Core左连接空引用异常问题
问题核心是左连接后,无匹配订单的商品对应的b对象为null,直接访问其月份属性会触发NullReferenceException——哪怕模型字段是可空类型也没用,因为你是在访问一个null对象的成员。
修复方案
在访问b的月份属性时,先通过**null条件运算符?.判断对象是否为null,再用空合并运算符??**把null值替换为0:
var output = (from c in categories join o in orders on c.item equals o.item into grouping from b in grouping.DefaultIfEmpty() select new Output_Model { product = c.product, January = b?.January ?? 0, February = b?.February ?? 0, March = b?.March ?? 0, April = b?.April ?? 0, May = b?.May ?? 0, June = b?.June ?? 0, July = b?.July ?? 0, August = b?.August ?? 0, September = b?.September ?? 0, October = b?.October ?? 0, November = b?.November ?? 0, December = b?.December ?? 0 }).ToList();
补充说明
- 调换连接顺序后无法包含Item D,是因为此时变成了以Orders为主表的左连接(或内连接),自然不会包含没有订单记录的商品,所以必须保持
categories作为左表的连接顺序。 - 如果你的月份字段是可空数值类型(比如
decimal?),b?.January会返回null,再通过?? 0将其转换为0,既符合需求,又避免了空引用。
内容的提问来源于stack exchange,提问作者bmurrell30
相关产品推荐
相关产品推荐

