代码之家  ›  专栏  ›  技术社区  ›  Mubsher Mughal

如何在实体框架和ASP中使用groupby子句。NET MVC 4?

  •  0
  • Mubsher Mughal  · 技术社区  · 8 年前

    我有一个 admission 模型等级如下:

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

    简单来说,我想统计一下今年每个月的学生人数。。。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Kevin Fichter    8 年前

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

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

    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(),然后选择新的匿名对象:

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