这个IQueryable.跳过和可查询.取上界

本文关键字:查询 IQueryable 这个 | 更新日期: 2023-09-27 18:15:31

我使用实体框架来查询数据库,我使用以下内容:

context
    .MyTable
    .Where(...)
    .Where(...)
    .OrderBy(...)
    .Skip((int)numberOfItemsToSkip)
    .Take((int)numberOfItemsToTake)
    .ToArray();

我的问题是关于Skip((int)numberOfItemsToSkip)部分。它只接受一个有Int32.MaxValue上界的Int32参数。现在,如果MyTable包含多于Int32.MaxValue条记录呢?我这么说的原因是因为我拥有的数据库是巨大的,并且大幅增长,这就是为什么我遇到Int32.MaxValue可能不够的情况。我的数据库托管在SQL Server上。

所以,有没有任何内置的方法来传递一个Int64参数代替?我可以继续做一些手动操作,但我的问题是关于实体框架内的一些东西。

这个IQueryable.跳过和可查询.取上界

您可以尝试重复几次Skip:

context
    .MyTable
    .Where(...)
    .Where(...)
    .OrderBy(...)//you forgot it
    .Skip(numberOfItemsToSkip1)
    .Skip(numberOfItemsToSkip2)
    .Take(numberOfItemsToTake)
    .ToArray();

result SQL (EF 6.1.3, SQL Server 2012):

SELECT *
    FROM [dbo].[Table]
    WHERE ....
    ORDER BY ...
    OFFSET numberOfItemsToSkip1 + numberOfItemsToSkip2 ROWS FETCH NEXT numberOfItemsToTake ROWS ONLY