Linq to SQL 通用分页方法混乱

问题描述 投票:0回答:1

如果我跑步

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

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

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

pagination linq-to-sql
1个回答
2
投票

我认为你需要在

IQueryable<T>
上有一个扩展方法。

© www.soinside.com 2019 - 2024. All rights reserved.