如何在 Entity Framework 和 ASP.NET MVC 4 中使用 groupby 子句?

How to use groupby clause in Entity Framework and ASP.NET MVC 4?

我有一个 admission 模型 class 如下:

public class admission
{
    public int AdmissionID {get;set;}
    public DateTime Session {get;set;}
    public string Class {get;set;}
    public DateTime RegDate {get;set;} 
}

我想得到当年每个月有多少学生被录取的录取报告。

例如:

 Month    No.Of.StudentsAdmitted
---------------------------------
  Jan          20              
  Feb           2
  March        10
  April         5

 and so on....

这是我试过但不知道我到底在做什么的查询:

db.admissions
   .Where(d => d.regDateTime.Value.Date.Year == DateTime.Now.Year )
   .GroupBy(d => d.regDateTime.Value.Month)
   .ToList();

我还想要月份名称而不是月份值。

简单来说,我想统计当年每个月的学生人数...

你基本上就在那里。您有一个分组列表,因此只需两步即可获得您想要的内容:

将整数(月份代码)转换为月份名称:

var mo = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(g.Key);

对于每组,计算每组中的项目数

g.Count()

综合起来:

    var resultset = admissions
        .Where(dd => dd.RegDate.Date.Year == DateTime.Now.Year)
        .GroupBy(ddda => ddda.RegDate.Month)
        .Select(s => new
    {
        month = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(s.Key),
        count = s.Count()
    }).ToList();

编辑:如果 EF 抱怨,您总是可以向上移动 ToList(),然后 select 新的匿名对象:

 var resultset = admissions
            .Where(dd => dd.RegDate.Date.Year == DateTime.Now.Year)
            .GroupBy(ddda => ddda.RegDate.Month)
            .ToList()
            .Select(s => new
            {
                month = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(s.Key),
                count = s.Count()
            });