如果我跑步
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();
分页现在发生在客户端代码中,即返回所有结果并且分页发生在内存中,这很糟糕。
我很困惑,但我显然错过了一些明显的东西......
我认为你需要在
IQueryable<T>
上有一个扩展方法。