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