按日期分组然后总和

时间:2015-08-07 14:40:28

标签: c# linq

我有以下型号:

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);
    }

在结果集中,值相同。

这里有什么问题?

感谢。

1 个答案:

答案 0 :(得分:1)

我认为它只是复制/粘贴失败。您为e.LateEntry中的3个媒体资源选择/总结了ChartModel

考虑改变


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(),
    });