Количество строк и данные в одном запросе с использованием ядра EFC#

Место общения программистов C#
Ответить
Anonymous
 Количество строк и данные в одном запросе с использованием ядра EF

Сообщение Anonymous »

У меня есть веб-страница, на которой данные, возвращаемые из базы данных, разбиваются на страницы, обычно с использованием какого-либо фильтра. Я возвращаю данные на выбранной странице плюс общее количество результатов, чтобы можно было настроить нумерацию страниц. Я достигаю этого сейчас, выполнив два запроса. Один для получения общего количества результатов, а другой для получения данных для запрошенной страницы. Интересно, было бы эффективнее и быстрее сделать это в одном запросе? Я могу добиться этого, выполнив запрос такого типа в MySQL:

Код: Выделить всё

SELECT
u.*,
COUNT(*) OVER () AS total_count
FROM
Users u
WHERE
u.Name Like '%John%'
ORDER BY
u.Name
LIMIT 0,30
Я попытался перевести этот запрос в LINQ с помощью EF Core следующим образом:

Код: Выделить всё

var filterQuery = dbContext.Users.Where(u => u.Contains("John");
var data = filterQuery
.Select(x => new {
Count = queryable.Count(),
Data = x
})
.Skip(0)
.Take(30)
.ToList();
Но ядро ​​EF по-прежнему выполняет 2 запроса:

Код: Выделить всё

SELECT COUNT(*) FROM Users WHERE Name Like '%John%'
сохраняет это в переменной, которая затем используется в последующем запросе в качестве поля.

Код: Выделить всё

SELECT
@__Count_1 AS `Count`,
u.*
FROM
Users AS u
WHERE
u.Name Like '%John%'
ORDER BY
u.Name
LIMIT 10 OFFSET 0
Я попробовал несколько переводчиков SQL в LINQ, но они, похоже, не помогли.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ng-ef-core
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»