Linq对SQL泛型分页方法的困惑

时间:2011-06-06 09:46:01

标签: linq-to-sql paging

如果我跑

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();

分页现在发生在客户端代码中,即返回所有结果并且分页发生在内存中,这很难看。

我很困惑,但很明显错过了一些明显的东西......

1 个答案:

答案 0 :(得分:2)

我认为你需要在IQueryable<T>上有一个扩展方法。