2015-04-19 59 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) 
          };