2013-04-12 185 views
3

我想知道如何按月分组一些数据并总结一个字段。 例如,我有一个MyObjects(DateTimeField, AmountField)的列表。 我想按DateTimeField分组,但不是整个日期,只是按月份,然后为每个月总计AmountFieldLinq分组日期(月)

我不知道为什么objectgrouped为空?

IEnumerable<MyObject> objectList= GetMyObject(); 

    var ObjectGrouped = objectList.GroupBy(l => l.ObjectDate.GetValueOrDefault().Month) 
          .Select(lg => 
           new 
           { 
            CurrentMonth = lg.Key, 
            Total = lg.Sum(w => w.ObjectAmount) 
           }); 

ObjectDate  ObjectAmount 

1/1/2013    3.3 
3/1/2013    6.9 
13/2/2013   5 
3/4/2013    3.6 
13/4/2013   15.2 
+1

非常相似:http://stackoverflow.com/questions/11574474/linq-get-sum-of-data-group-by-date –

回答

2

试试这个:

List<DateTime> list = new List<DateTime>(); 
var grouppedResult = list.GroupBy(x => x.Month); 
+0

我没有字段月,我只有一个字段类型DateTime,但我只想按月分组,然后总结每个月的所有金额。 – user2112420

+0

class MyModel {public DateTime Time {get;组; }} List list ... list.GroupBy(x => x.Time.Month); –

+0

我不知道为什么我不能这样做,顺便说一下DateTime是可空的,是因为这样吗? – user2112420

1
var groups = list.GroupBy(l => l.DateTimeField.Year * 12 + l.DateTimeField.Month) 
       .Select(g => new { 
           Month=g.First().DateTimeField, 
           Sum=g.Select(a=>a.AmountField).Sum() 
          }) 
       .ToList(); 
+0

我不知道为什么我没有得到任何关于这个组是什么,这是空的,我的列表有值... – user2112420

4

我想通过 “月” 你的意思是 “年份和月份”:

要忽略空值:

var query = myList.Where(i => i.DateTimeField.HasValue) 
        .GroupBy(i => i.DateTimeField.Value.Month) 
        .Select(g => new { 
          Month=g.Key, 
          Total=g.Sum(i=>i.AmountField) 
         }); 

把null val在一个单独的桶的UE( “0” 月):

var query = myList.GroupBy(i => i.DateTimeField.HasValue ? i.DateTimeField.Value.Month : 0) 
        .Select(g => new { 
          Month=g.Key, 
          Total=g.Sum(i=>i.AmountField) 
         }); 
+0

不,只是一个月,因为在我得到所有来自当年的数据。但我不能做DateTime.Month,我认为是因为它是可空的,我该怎么办?谢谢 – user2112420

+0

你想如何处理空值?他们是在自己的桶里还是被忽略? –

+0

这只是一个Model和DataBase的东西,但它在数据库上始终不为空。 – user2112420