分组按周/月 [英] GroupBy week/month
问题描述
我从数据库中获取产品列表,每个产品都填充了paymentDate,我想这样格式化我的数据(仅作为示例):
I'm getting list of products from a database, each of them have populated paymentDate and I would like to format my data like this (just an example):
{
Week:1,
Month:8,
Total:50
},
{
Week:2,
Month:8,
Total:40
},
{
Week:3,
Month:8,
Total:70
},
{
Week:4,
Month:8,
Total:85
}
... and so on..
现在,我将数据按月分组,并且在 4 个月内,它会返回4 INSTEAD OF 16 行,例如:
Now I'm getting my data grouped by month and for 4 months it returns 4 INSTEAD OF 16 rows like:
Month:8,
Total:250
那就是我所不想要的..
And that's what I don't want..
这是我的代码:
首先,我要从数据库中获取最近4个月的所有行,其中有20-30行具有PaymentDate
值(这是最近4个月的行).
First I'm getting all rows from a last 4 months from a database, there is like 20-30 rows with PaymentDate
value (which are rows from last 4 months).
var yas = await _context.products
.AsNoTracking()
.Where(x => (x.PaymentDate != null && x.PaymentDate > DateTime.UtcNow.AddMonths(-4))).ToListAsync();
获取所有行之后,我试图将它们分组,以获取每个MONTE中按WEEKS分组的数据.
After I get all rows, I'm trying to group them on a way to get data grouped by WEEKS in each MONTH.
var grouped = yas.GroupBy(x => CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(x.PaymentDate ?? DateTime.UtcNow, CalendarWeekRule.FirstDay, DayOfWeek.Monday))
.Select(product => new ProductsDemoData
{
//Week = should be week
Amount = product.Sum(x => x.Amount),
Month = product.FirstOrDefault().PaymentDate.Value.Month
});
数据示例:
推荐答案
您已按Week分组,所以我认为您可以这样做:
you've grouped by Week, so you can just do this I think:
.Select(product => new ProductsDemoData
{
Week = product.Key,
Amount = product.Sum(x => x.Amount),
Month = product.FirstOrDefault().PaymentDate.Value.Month
});
这篇关于分组按周/月的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!