2015-04-19 60 views
3

我可以按年選擇總和,這很簡單。如何在LINQ中按月每月彙總數據?

就像這樣。

var query = from t in ctx.SomeDataEntity 
          group t by t.DateAdded.Year into g 
          select new 
          { 
           Year = g.Year, 
           Total = g.Sum(t => t.SomeColumn1) + 
           g.Sum(t => t.SomeColumn2) + 
           g.Sum(t => t.SomeColumn3) + 
           g.Sum(t => t.SomeColumn4) 
          }; 

但是,如何過濾每個月的數據? 簡單地將t.DateAdded.Year替換爲t.DateAdded.Month並不容易,因爲t.DateAdded.Month是1,2,3,...,12。 我需要的格式是2014-01,2014-02,...,2014-12。

+1

也見:http://stackoverflow.com/questions/5703593/writing-group-by-on-anonymous-types – Nate

回答

1

你可以都年和月這樣的組:

var query = from t in ctx.SomeDataEntity 
        group t by new 
        { 
         Year = t.DateAdded.Year, 
         Month = t.DateAdded.Month 
        } into g 
        select new 
        { 
         MonthAndYear = g.Key.Year + "-" + g.Key.Month, 
         Total = g.Sum(t => t.SomeColumn1) + 
         g.Sum(t => t.SomeColumn2) + 
         g.Sum(t => t.SomeColumn3) + 
         g.Sum(t => t.SomeColumn4) 
        }; 
+0

1.你可以參考g.Year沒有密鑰? 2.什麼類型是g.Year? –

+0

@GiorgiNakeuri 1)良好的捕獲,你需要.Key屬性,2)它只是一個int。 – Nate

0

您可以通過月份和年份都組:

var query = from t in ctx.SomeDataEntity 
         group t by new { Month = t.DateAdded.Month, Year = t.DateAdded.Year } into g 
         select new 
         { 
          Year = g.Key.Year, 
          Month = g.Key.Month, 
          Total = g.Sum(t => t.SomeColumn1) + 
          g.Sum(t => t.SomeColumn2) + 
          g.Sum(t => t.SomeColumn3) + 
          g.Sum(t => t.SomeColumn4) 
         }; 
0

試試這個:

var query = from t in ctx.SomeDataEntity 
          group t by new { t.DateAdded.Year, t.DateAdded.Month} into g 
          select new 
          { 
           Year = g.Key.Year, 
           Month = g.Key.Month, 
           Total = g.Sum(t => t.SomeColumn1) + 
           g.Sum(t => t.SomeColumn2) + 
           g.Sum(t => t.SomeColumn3) + 
           g.Sum(t => t.SomeColumn4) 
          };