C# 按周/月分组
我从数据库中获取产品列表,每个产品都填充了paymentDate,我想将我的数据格式化为这样(仅举一个例子): 现在,我将按月份对数据进行分组,对于4个月,它将返回4,而不是16行,如:C# 按周/月分组,c#,linq,datetime,group-by,C#,Linq,Datetime,Group By,我从数据库中获取产品列表,每个产品都填充了paymentDate,我想将我的数据格式化为这样(仅举一个例子): 现在,我将按月份对数据进行分组,对于4个月,它将返回4,而不是16行,如: Month:8, Total:250 这就是我不想要的 这是我的密码: 首先,我从数据库中获取过去4个月的所有行,有20-30行具有PaymentDate值(这是过去4个月的行) 在我得到所有行之后,我试图对它们进行分组,以便在每个月按周对数据进行分组 var grouped = yas.GroupBy(x
Month:8,
Total:250
这就是我不想要的
这是我的密码:
首先,我从数据库中获取过去4个月的所有行,有20-30行具有PaymentDate
值(这是过去4个月的行)
在我得到所有行之后,我试图对它们进行分组,以便在每个月按周对数据进行分组
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
});
数据示例:
您已按周分组,因此我认为您可以这样做:
.Select(product => new ProductsDemoData
{
Week = product.Key,
Amount = product.Sum(x => x.Amount),
Month = product.FirstOrDefault().PaymentDate.Value.Month
});
这里的键是什么?@Roxy'Pro
键是您分组的键,在本例中是您的选择中的周数,您操作的是分组依据
表达式的结果,它是(IIRC)一个i分组
。这样的列表中的每个项都有一个键
属性,该属性是分组依据。@GPW我认为它不起作用,因为我得到的是4行而不是16行,分组依据不正确。。我应该得到16行-16周,持续4个月…@Roxy'Pro the groupBy工作在PaymentDate的weekNumber上……如果在PaymentDate中只有4个不同的星期可用,那么您将只获得4行。对于16周,必须有跨越16周的付款日期。这在数据中发生了吗?这会导致第1个月的第1周,而不是第8周,因为这是一年中的第1周。你想要一个月中的一周吗?@juharr在我的yas变量中有3个月的结果,所以应该有9个星期。@Jon你觉得怎么样,伙计?@Roxy'Pro:你怎么会期望得到16行?请提供一些示例数据。@mm8此变量yas
包含大约20种产品(5种从1月开始,5种从2月开始,5种从3月开始,5种从4月开始)。。。这20个产品中的每一个都有ProductDate,我想把这些行分组,就像我在上面发布的示例一样,我现在将对其进行一点检查。(基本上是按月分组,按一个月中的一周分组,我将得到一周:3,第3周中项目的总金额大约为50。)。。
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
});
.Select(product => new ProductsDemoData
{
Week = product.Key,
Amount = product.Sum(x => x.Amount),
Month = product.FirstOrDefault().PaymentDate.Value.Month
});