按日期分组,然后按总和分组

本文关键字:然后 日期 | 更新日期: 2023-09-27 18:07:04

我有以下模型:

public class MonthReport
{
    public int Id { set; get; }
    public DateTime MonthYear { set; get; }
    public int LateEntry { set; get; }
    public int LeftEarly { set; get; }
    public int TotalAttandence { set; get; }
    public int Great { set; get; }
    public int PersonelId { set; get; }
    public Personel Personel { set; get; }
}

先用代码映射到db

我想按月和年对报表进行分组,然后我想获得特定月份LateEntry、LeftEarly和其他int值的总和。

我有下面的代码片段,它不能返回正确的内容。

    public ActionResult GetReportsGroupedByMonth()
    { 
        var results = _db.MonthReports
                         .GroupBy(
                            x => new
                            {
                                Month = x.MonthYear.Month,
                                Year = x.MonthYear.Year
                            }, 
                            (key, g) => 
                                new ChartModel
                                {
                                    Date = g.Select(v=>v.MonthYear).FirstOrDefault(),
                                    GreatDay = g.Select(e=>e.Great).Sum(),
                                    LateEntry = g.Select(e => e.LateEntry).Sum(),
                                    LeftEarly = g.Select(e => e.LateEntry).Sum(),
                                    TotalAttendance = g.Select(e => e.LateEntry).Sum(),
                                });
        return Json(results, JsonRequestBehavior.AllowGet);
    }

在结果集中,值是相同的。

这里有什么问题?

谢谢。

按日期分组,然后按总和分组

我认为这只是一个复制/粘贴失败。您为ChartModel中的3个属性选择了e.LateEntry

考虑改变


new ChartModel
    {
        Date = g.Select(v=>v.MonthYear).FirstOrDefault(),
        GreatDay = g.Select(e=>e.Great).Sum(),
        LateEntry = g.Select(e => e.LateEntry).Sum(),
        LeftEarly = g.Select(e => e.LateEntry).Sum(),
        TotalAttendance = g.Select(e => e.LateEntry).Sum(),
    });

 
new ChartModel
    {
        Date = g.Select(v=>v.MonthYear).FirstOrDefault(),
        GreatDay = g.Select(e=>e.Great).Sum(),
        LateEntry = g.Select(e => e.LateEntry).Sum(),
        LeftEarly = g.Select(e => e.LeftEarly).Sum(),
        TotalAttendance = g.Select(e => e.TotalAttendance).Sum(),
    });