Linq 按日期分组(月)

use*_*420 4 c# linq lambda sum linq-group

我想知道如何按月对一些数据进行分组并对字段求和。例如,我有一个MyObjects(DateTimeField, AmountField). 我想按 分组DateTimeField,但不是整个日期,只是按月分组,然后AmountField对每个月求和。

我不知道为什么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
Run Code Online (Sandbox Code Playgroud)

D S*_*ley 6

我假设“月”是指“月和年”:

忽略空值:

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) 
                         });
Run Code Online (Sandbox Code Playgroud)

将空值放在单独的存储桶中(“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) 
                         });
Run Code Online (Sandbox Code Playgroud)