【发布时间】:2019-09-19 12:22:33
【问题描述】:
我正在从数据库中获取产品列表,每个产品都填充了 paymentDate,我想像这样格式化我的数据(只是一个例子):
{
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 行,例如:
Month:8,
Total:250
这就是我不想要的..
这是我的代码:
首先,我从数据库中获取过去 4 个月的所有行,大约有 20-30 行具有 PaymentDate 值(这是过去 4 个月的行)。
var yas = await _context.products
.AsNoTracking()
.Where(x => (x.PaymentDate != null && x.PaymentDate > DateTime.UtcNow.AddMonths(-4))).ToListAsync();
在获得所有行后,我试图将它们分组,以便在每个月按 WEEKS 分组数据。
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
});
数据示例:
【问题讨论】:
-
这应该会导致第 1 个月的第 1 周,而不是 8 周,因为这是一年中的一周。您是否想要每月的一周?
-
@juharr 在我的 yas 变量中有 3 个月的结果,所以应该有 9 周..
-
@Jon 你觉得朋友怎么样?
-
@Roxy'Pro:你怎么会期望得到 16 行?请提供一些示例数据。
-
@mm8 这个变量
yas包含 20 种产品(1 月 5 日,2 月 5 日,3 月 5 日,4 月 5 日)......这 20 种产品中的每一种都有 ProductDate,我会喜欢像我上面发布的示例那样对这些行进行分组,我现在将对其进行一点扩展。 (基本上按月分组 - 每月按一周分组,我会得到第 3 周,第 3 周的项目总金额为 50 ..