首页 > 解决方案 > 实体框架组总和处理空值

问题描述

我试图从数据库表 CustomerComplaintExpenseRows 返回每月总和。由于我需要每月值,即使它是 0 我必须使用总和查询对月份范围进行分组。在 var q cc.sum 可能在某些月份为 null 并且十进制数据类型将不接受“?? 0” - 操作。如果值为空,如何让我的代码返回 0?

var firstDayOfYear = new DateTime(DateTime.Now.Year, 1, 1);
var lastDayOfYear = new DateTime(DateTime.Now.Year, 12, 31);

var months = Enumerable.Range(1, 12)
            .Select(month => month)
            .ToList();

var complaints = _context.CustomerComplaintExpenseRows
                   .Where(a => a.CustomerComplaint.ComplaintDate > firstDayOfYear 
                            && a.CustomerComplaint.ComplaintDate < lastDayOfYear)
                   .GroupBy(o => o.CustomerComplaint.ComplaintDate.Month)
                   .Select(a => new
                   {
                       a.Key,
                       sum = a.Sum(i => i.RowValue)
                   })
                   .ToList();

var q = from m in months
        join cc in complaints on m equals cc.Key into joined
        from cc in joined.DefaultIfEmpty()
        select new
        {
            name = CultureInfo.CreateSpecificCulture("fi-FI")
                        .DateTimeFormat
                        .GetAbbreviatedMonthName(m),
            value = cc.sum
        };

我正在寻找的示例结果:

[
    {
    "name": 'Jan',
    "value": 300,00
    },
    {
    "name": 'Feb',
    "value": 0,00
    },
    {
    "name": 'Mar',
    "value": 5,30
    },
]

标签: entity-frameworklinqasp.net-core

解决方案


只是为了完整性

像这样设置值..

value = (cc.sum == null)? 0: cc.sum

推荐阅读