我不想有一个返回 IQueryable 的方法,但我也希望我的分页查询在数据库中而不是在内存中执行。本文讨论如何通过 IQueryable 仅公开数据的子集。
我修改了文章中描述的 GetRange 方法,如下所示。
public IEnumerable<T> GetRange<TKey>(int page, int pageSize, Expression<Func<T, TKey>> keySelector, bool ascending )
{
IOrderedQueryable<T> sourceOrdered = null;
sourceOrdered = ascending ? source.OrderBy(keySelector) : source.OrderByDescending(keySelector);
return sourceOrdered.Skip((page - 1) * pageSize).Take(pageSize);
}
并通过它 contrib IPagination 如下。
var productPagedList = productList.GetRange(page ?? 1, 10, p => p.SupplierID, false)
.AsPagination(page ?? 1, 10);
但是网格需要知道总记录数才能正确呈现寻呼机。有没有办法让 MVCContrib 网格以这种方式与从服务层公开的 IQueryable 的子集一起工作?或者以某种方式将总记录数提供给它?或者有什么其他技巧吗?
谢谢