我正在使用Entity Framework来查询数据库,我使用以下内容:
context
.MyTable
.Where(...)
.Where(...)
.OrderBy(...)
.Skip((int)numberOfItemsToSkip)
.Take((int)numberOfItemsToTake)
.ToArray();
我的问题是Skip((int)numberOfItemsToSkip)
部分。它只接受Int32
参数,其上限为Int32.MaxValue
。现在,如果MyTable
包含的内容超过Int32.MaxValue
,该怎么办?我说这个的原因是因为我拥有的数据库是巨大的并且大幅增长,这就是为什么我遇到Int32.MaxValue
可能不够的情况。我的数据库托管在SQL Server上。
那么,有没有内置的方法来传递Int64
参数呢?我可以继续做一些手动操作,但我的问题是关于实体框架内的内容。
答案 0 :(得分:1)
您可以尝试多次重复Skip
:
context
.MyTable
.Where(...)
.Where(...)
.OrderBy(...)//you forgot it
.Skip(numberOfItemsToSkip1)
.Skip(numberOfItemsToSkip2)
.Take(numberOfItemsToTake)
.ToArray();
结果SQL(EF 6.1.3,SQL Server 2012):
SELECT *
FROM [dbo].[Table]
WHERE ....
ORDER BY ...
OFFSET numberOfItemsToSkip1 + numberOfItemsToSkip2 ROWS FETCH NEXT numberOfItemsToTake ROWS ONLY