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

问题描述:

我有一个admission模型类,如下所示:如何在Entity Framework和ASP.NET MVC 4中使用groupby子句?

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并发症AINS,可以随时移动ToList()起来,然后选择新的匿名对象:

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

感谢@K_foxer,它太简单了,虽然我发现了一个长期.....感谢名单后的溶液 – mubsher