这个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
参数代替?我可以继续做一些手动操作,但我的问题是关于实体框架内的一些东西。
您可以尝试重复几次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