【问题标题】:SQL query to LINQ expression - Entity Core Framework 3 + SQL ServerSQL 查询到 LINQ 表达式 - Entity Core Framework 3 + SQL Server
【发布时间】:2020-05-29 12:29:19
【问题描述】:
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 天内在同一查询中创建的行数。

【问题讨论】:

  • 这种查询不能很好地转换为 LINQ。数据库中还有一些更好的东西。

标签: sql-server linq entity-framework-core fluent


【解决方案1】:

你需要使用单例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 与为此查询列出的完全相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多