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

EF Core查询月度统计仅返回有数据月份 如何补全全年月份无数据值为0

实现方案

核心思路

  • 原有EF Core分组查询仅会返回数据库中存在匹配数据的月份,因此需要额外构造1-12月的完整基准集合,和查询结果合并补全缺失月份
  • 数据查询逻辑优先在数据库侧执行,内存侧仅做补全月份的轻量操作,不影响查询性能

调整后代码

// 第一步:查询数据库中存在数据的月份统计结果
var existMonthStats = context.Bids
    .Where(b => b.UID == UID 
        && (b.Status == MyStatus.Awarded || b.Status == MyStatus.Completed)
        // 若需要统计指定年份,可放开下方注释,替换为目标年份
        // && b.InsertedDate.Year == 2024
    )
    .GroupBy(a => a.InsertedDate.Month)
    .Select(g => new MyServiceList
    {
        Key = g.Key.ToString(),
        Month = g.Key.ToString(),
        Total = g.Sum(s => s.totalBudget)
    })
    .ToList();

// 第二步:补全全年12个月数据,无数据月份Total默认赋值为0
var fullYearStats = Enumerable.Range(1, 12)
    .Select(month => 
        existMonthStats.FirstOrDefault(item => item.Month == month.ToString())
        ?? new MyServiceList
        {
            Key = month.ToString(),
            Month = month.ToString(),
            Total = 0
        })
    .OrderBy(item => int.Parse(item.Month))
    .ToList();

优化提示

你原有代码中的Include(r => r.AllRequest).ThenInclude(r => r.Category)没有必要,你的整个分组查询未用到关联实体的任何属性,删除后可以减少不必要的表关联,提升查询性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:24:06