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

MongoDB .NET Core分组时无法正确计算可空decimal属性的求和

解决可空decimal类型分组求和异常问题
  • 问题原因:可空decimal(decimal?)类型在MongoDB LINQ的Sum方法中,不会自动将null值转为0参与计算,导致求和结果不符合预期;而整数类型本身非空,驱动处理逻辑更直接,因此能得到正确结果。

  • 修复方案:求和时显式处理可空值,将null转为0后再计算,以下是两种常用实现方式:

方式一:使用GetValueOrDefault()

var data1 = mongoCollection.Group(e => e.ClientId,
                g => new
                {
                    Total1 = g.Sum(e => e.Abc.Val1.GetValueOrDefault()),
                    Total2 = g.Sum(e => e.Abc.Val2.GetValueOrDefault()),
                    Total3 = g.Sum(e => e.Abc.Val3.GetValueOrDefault()),
                    Total4 = g.Sum(e => e.Abc.Val4.GetValueOrDefault()),        
                }).ToList();

方式二:使用null合并运算符??

var data1 = mongoCollection.Group(e => e.ClientId,
                g => new
                {
                    Total1 = g.Sum(e => e.Abc.Val1 ?? 0m),
                    Total2 = g.Sum(e => e.Abc.Val2 ?? 0m),
                    Total3 = g.Sum(e => e.Abc.Val3 ?? 0m),
                    Total4 = g.Sum(e => e.Abc.Val4 ?? 0m),        
                }).ToList();

如果存在Abc本身为null的情况,需要额外判断避免空引用:

var data1 = mongoCollection.Group(e => e.ClientId,
                g => new
                {
                    Total1 = g.Sum(e => e.Abc?.Val1 ?? 0m),
                    Total2 = g.Sum(e => e.Abc?.Val2 ?? 0m),
                    Total3 = g.Sum(e => e.Abc?.Val3 ?? 0m),
                    Total4 = g.Sum(e => e.Abc?.Val4 ?? 0m),        
                }).ToList();

以上方法都能确保null值被当作0参与求和,得到正确的分组汇总结果。

内容的提问来源于stack exchange,提问作者Rushi Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:45:49