SQL 查询 LINQ 表达式 - Entity Core Framework 3 + SQL 服务器

SQL query to LINQ expression - Entity Core Framework 3 + SQL Server

DECLARE @thirtyDaysAgo DATETIME = getdate()-30

SELECT 
sum(case when CreatedWhen >= @thirtyDaysAgo then 1 else 0 end) lessThan30,
sum(case when CreatedWhen < @thirtyDaysAgo then 1 else 0 end) Greaterthan30
FROM ThisAwesomeTable

不知道如何将其转换为流畅的查询。

目的是计算 30 天前创建的行数,并计算同一查询中最近 30 天创建的行数。

你需要使用单例 GroupBy 技巧:

var ans = ThisAwesomeTable.GroupBy(r => 1)
                          .Select(rg => new {
                              lessThan30 = rg.Sum(r => r.CreatedWhen >= thirtyDaysAgo ? 1 : 0),
                              GreaterThan30 = rg.Sum(r => r.CreatedWhen < thirtyDaysAgo ? 1 : 0)
                          });

请注意,EF Core 3 生成的 SQL 与针对此查询列出的完全相同。