如果我跑
ctx.CompanyDirectors.OrderBy(c => c.Id).Skip(pageNumber*pageSize).Take(pageSize).ToList();
分页发生在SQL Server(现在经典的row_number() OVER
)上,这正是我所期望的。
但是我在下面添加了一个小的快捷方式扩展方法:
public static IEnumerable<T> Page<T>(this IEnumerable<T> enumerable, int pageNumber, int pageSize)
{
return enumerable
.Skip(pageNumber*pageSize)
.Take(pageSize);
}
当我做的时候
ctx.CompanyDirectors.OrderBy(c => c.Id).Page(pageNumber, pageSize).ToList();
分页现在发生在客户端代码中,即返回所有结果并且分页发生在内存中,这很难看。
我很困惑,但很明显错过了一些明显的东西......
答案 0 :(得分:2)
我认为你需要在IQueryable<T>
上有一个扩展方法。