SQL запрос к выражению LINQ - Entity Core Framework 3 + SQL Сервер - PullRequest
0 голосов
/ 13 февраля 2020
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 дней go, а также подсчитать количество строки, созданные за последние 30 дней в том же запросе.

1 Ответ

2 голосов
/ 14 февраля 2020

Вам необходимо использовать трюк синглтона 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, как указано в этом запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...