0

我有一個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(); 

我也想月份名稱而不是月份值。

更簡單的話,我要算學生人數在今年的每個月...

回答

1

你基本上沒有。你有分組名單,所以只需兩個步驟仍然得到你想要的東西:

轉換整型(一個月代碼)月份名稱:

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

相關問題