Важное примечание для людей, использующих EF Core> = 1.1.x:
В то время, когда я искал решение этой проблемы, эта страница была / была рангом 1 по термину Google«Общее количество страниц подкачки EF».
После проверки профилировщика SQL я обнаружил, что EF генерирует SELECT COUNT(*)
для каждой возвращаемой строки .Мне надоело каждое решение, представленное на этой странице.
Это было протестировано с использованием EF Core 2.1.4 и SQL Server 2014. В конце концов мне пришлось выполнить их как два отдельных запроса, например.Что, по крайней мере для меня, не конец света.
var query = _db.Foo.AsQueryable(); // Add Where Filters Here.
var resultsTask = query.OrderBy(p => p.ID).Skip(request.Offset).Take(request.Limit).ToArrayAsync();
var countTask = query.CountAsync();
await Task.WhenAll(resultsTask, countTask);
return new Result()
{
TotalCount = await countTask,
Data = await resultsTask,
Limit = request.Limit,
Offset = request.Offset
};
Похоже, что команда EF Core знает об этом:
https://github.com/aspnet/EntityFrameworkCore/issues/13739 https://github.com/aspnet/EntityFrameworkCore/issues/11186