如何在 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()
});
我有一个 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()
});