Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按周/月分组_C#_Linq_Datetime_Group By - Fatal编程技术网

C# 按周/月分组

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

我从数据库中获取产品列表,每个产品都填充了paymentDate,我想将我的数据格式化为这样(仅举一个例子):

现在,我将按月份对数据进行分组,对于4个月,它将返回4,而不是16行,如:

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