PagedList с Entity Framework получает все записи
PagedList - это пейджинговая библиотека.
_dbContext.Products.ToList().ToPagedList(1, 25);
Выше код получит первые 25 записей в базе данных для страницы 1.
Проблема в том, что ToList()
Вызов получит все записи в базе данных. Тогда ToPageList()
Вызов выберет первые 25 записей.
Как мне объединить EF с PagedList, чтобы я получил только первые 25 записей в базе данных? И не получить все записи, а затем взять первые 25 записей.
PS: я должен написать свою собственную библиотеку подкачки или использовать онлайн-библиотеку? Пожалуйста, предложите мне любую другую библиотеку.
2 ответа
Действительно, вы делаете ToList()
, поэтому запрос будет выполнен, и отложенное выполнение больше не будет отложено.
Вы можете попробовать это без ToList()
звоните, но все зависит от реализации ToPagedList(int, int)
метод.
Вы можете просто сделать пейджинг самостоятельно.
const int pageSize = 25;
const int pageNumber = 1;
IQueryable<Product> query = _dbContext.Products;
var pagedQuery = query.Skip(pageSize * (pageNumber - 1)).Take(pageSize).ToList();
И да, вы можете просто скрыть эту логику за методом расширения на IQueryable<T>
,
public static class IQueryableExtensions {
public static IQueryable<T> ToPagedQuery<T>(this IQueryable<T> query, int pageSize, int pageNumber) {
return query.Skip(pageSize * (pageNumber - 1)).Take(pageSize);
}
}
Самое простое решение - использовать AsEnumerable()
но это требует заказа. В отличие от ToList()
, AsEnumerable()
не попадает в базу данных.
_dbContext.Products.OrderBy(p => p.Id).AsEnumerable().ToPagedList(1, 25);