Linq Группировка по дате (месяцу)

Я хотел бы знать, как я могу сгруппировать некоторые данные по месяцам и суммировать поля. Например, у меня есть список 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

3 ответа

Я предполагаю, что под "месяцем" вы подразумеваете "месяц и год":

Чтобы игнорировать нулевые значения:

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) 
                         });

положить нулевые значения в отдельную группу ("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) 
                         });

Попробуй это:

List<DateTime> list = new List<DateTime>();
var grouppedResult = list.GroupBy(x => x.Month);
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();
Другие вопросы по тегам