如何显示每个月,即使本月没有数据

本文关键字:数据 何显示 显示 | 更新日期: 2023-09-27 18:35:54

查询

工作正常,但它只提取一个月事件超过零的值,例如,如果一月没有值,那么它不显示一月。我想展示所有月份。

var result = tIncidentReportings
    .AsEnumerable()
    .GroupBy(c => c.Date.ToString("MMM"))
    .Select(g => new { Month = g.Key, Count = g.Count() })
    .OrderBy(x => DateTime.ParseExact((x.Month).ToString(), "MMM", CultureInfo.InvariantCulture));

如何显示每个月,即使本月没有数据

问题是,对于没有任何报告的任何月份,您都会缺少几个月。您必须检查哪些月份没有任何月份并手动添加它们。

var result = tIncidentReportings
    .AsEnumerable()
    .GroupBy(c => c.Date.ToString("MMM"))
    .Select(g => new { Month = g.Key, Count = g.Count() })
    .OrderBy(x => DateTime.ParseExact((x.Month).ToString(), "MMM", CultureInfo.InvariantCulture));
var months = 
System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.MonthGenitiveNames.Select(s => s.Substring(0,3)).ToList();
months.foreach(m => {
    if(!results.Select(r => r.Month).Contains(m)){
        results.Add(new {Month = m, Count = 0};
});

类似的东西

或重写:

var months = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.MonthGenitiveNames.Select(s => s.Substring(0,3)).ToList();
var reports = months.Select(m => 
    new { 
        Month = m, 
        Count = tIncidentReportings.AsEnumerable().Where(i => i.Date.ToString("MMM") == m).Count()
    }
).OrderBy(x => DateTime.ParseExact((x.Month).ToString(), "MMM", CultureInfo.InvariantCulture)).ToList();