2012-06-29 119 views
3

我已經在與記錄表ActivityLog:需要幫助LINQ查詢集團通過+計數

ID, UserId,  Category, Created 
1  11  DeAssigned 05/10/2012 
2  11   LogIn 05/11/2012 
3  20  Assigned 06/15/2012 
4  11  Assigned 06/10/2012 
5  20  DeAssigned 06/13/2012 
6  20  Assigned 07/12/2012 
7  11  DeAssigned 07/16/2012 
8  20  Assigned 08/15/2012 
... 

現在我查詢表創建相同結構的相同的結果。這如:

var data = new[] { 
        new { Month = "05", Assigned = 14, DeAssigned = 5, LogIn=1 }, 
        new { Month = "06", Assigned = 5, DeAssigned = 2, LogIn=0 }, 
        new { Month = "07", Assigned = 50, DeAssigned = 8, LogIn=0 }, 
        new { Month = "08", Assigned = 15, DeAssigned = 1, LogIn=0 } 
}; 

我所取得的成就:

var result = (from l in repoA.GetAll() 
         where l.Created >= System.DateTime.Now.AddYears(-1) 
         group l by new { l.Created.Value.Month, l.Category } 
         into groups 
         orderby groups.Key.Month 
         select new 
           { 
            Month = groups.Key.Month, 
            Category = groups.Key.Category, 
            Count = groups.Count() 
           }); 

沒有最優的結果,但算上所有活動的按月份劃分:

[0] {Month = 6, Category = Assigned, Count = 2} 
[0] {Month = 6, Category = Designed, Count = 1} 
[0] {Month = 6, Category = LogIn, Count = 1} 
[0] {Month = 7, Category = Assigned, Count = 3} 

我如何查詢我的表格式化我在「水平計數」格式結果?

回答

2

或者simplier:

var result = (from l in repoA.GetAll() 
          where l.Created >= System.DateTime.Now.AddYears(-1) 
          group l by l.Created.Month into groups 
          orderby groups.Key ascending 
          select new 
           { 
            Month = groups.Key, 
            Assigned = groups.Where(g => g.Category == "Assigned").Count(), 
            Deassigned = groups.Where(g => g.Category == "DeAssigned").Count(), 
            LogIn = groups.Where(g => g.Category == "LogIn").Count() 
           }); 
+0

它的工作原理..謝謝你這麼多,你很快得出答案... – Flyboy