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
相关产品推荐
相关产品推荐

