按周分组 EF Core 2.1

5
我需要根据注册日期按周分组吗?

在此输入图片描述


我认为你需要研究一下如何在LINQ中进行分组,这看起来不太对。更有趣的是,在你的分组中我甚至没有看到注册日期。我建议你下载LINQPad并在其中运行它。另外,为了清楚你的意图,只需提供你想要LINQ的SQL语句即可,因为试图弄清楚你想要什么太难了。 - Seabizkit
1
日期是Trsdt,它也在条件中。 - Javier Flores
2个回答

8

不太清楚您想使用什么日历周规则,所以假设您想要最简单的(FirstDay),即像这样的公式:

Week = 1 + (DateTime.DayOfYear - 1) / 7

EF Core支持将DayOfWeek翻译成SQL,因此您可以使用类似以下内容的语句(不确定是否需要Year):

.GroupBy(g => new { g.Trsdt.Year, Week = 1 + (g.Trsdt.DayOfYear - 1) / 7 })

我使用MySql作为DBServer,但这样的分组不起作用。 - Timothy
@Timothy 真遗憾。我猜你所说的“不起作用”是指 MySql 数据库提供程序不支持 DayOfWeek 的转换。顺便说一下,至少有两个 MySQL 数据库提供程序 - 一个来自 Oracle,另一个叫做 Pomelo,不确定你使用的是哪一个,但总的来说 Pomelo 支持更好。 - Ivan Stoev
我使用Pomelo。顺便说一句,我已经用手动创建的列表测试了这个公式,它完美地工作。 - Timothy
也适用于Postgres! - Adrian Frielinghaus

1
使用 System.Globalization;
 .GroupBy( 
              g => CultureInfo.CurrentCulture.Calendar.GetWeekOfYear( g.Trsdt, 
              CalendarWeekRule.FirstDay,DayOfWeek.Monday )
           )

1
很遗憾,这无法转换为 SQL 查询。 - Mark Verkiel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接