You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 17:18:24