LINQ & SQL 服务器:从起始行开始排序
LINQ & SQL Server : order by from starting row
我有一个 table,它包含三列:username
、followerCount
和 CreateDate
。
table 中大约有 110000 名用户,我正在尝试显示按 followerCount
订购的用户。我是这样做的:
select top 50 *
from Users
where followerCount <= @followerCount
order by followerCount desc, createDate desc
因此,对于第二页,我从第一页最后 followerCount
传递,然后接收下一页,依此类推。
但是 table 中有一些用户拥有相同的关注者数量。例如有 250 个用户有 5000 个关注者。所以当我进行分页时,我无法正确地找到下一页,因为有更多的5000粉丝的用户。
例如,我在第 9 页,最后一个用户有 5001 个关注者,我将 5001 传递给存储过程,我得到 50 个用户,这些用户有 5000 个用户。但是还有 200 个用户,当我这次将 5000(上一次分页的最后一个数字)再次传递到我的存储过程时,它将跳过所有其余部分并为我带来 4xxx 关注者的用户。
我怎样才能带来具有相同粉丝数量的正确用户?
更正:我正在使用 Entity Framework 用于此目的,我张贴了 SQL 声明以便于理解。
只需跟踪您所在的第 # 页,然后您就可以使用 Skip and Take 为您进行分页:
var page=9; //Set to whatever page you want
var pageSize=50;
var results=db.Users
.OrderByDescending(u=>u.followerCount)
.ThenByDescending(u=>u.createDate)
.Skip((page-1)*pageSize)
.Take(pageSize);
如果您需要存储过程为您进行分页,那么您需要阅读如何 ROW_NUMBER OVER() works for older versions of SQL Server (pre-2012) or OFFSET FETCH 了解较新的过程。
我有一个 table,它包含三列:username
、followerCount
和 CreateDate
。
table 中大约有 110000 名用户,我正在尝试显示按 followerCount
订购的用户。我是这样做的:
select top 50 *
from Users
where followerCount <= @followerCount
order by followerCount desc, createDate desc
因此,对于第二页,我从第一页最后 followerCount
传递,然后接收下一页,依此类推。
但是 table 中有一些用户拥有相同的关注者数量。例如有 250 个用户有 5000 个关注者。所以当我进行分页时,我无法正确地找到下一页,因为有更多的5000粉丝的用户。
例如,我在第 9 页,最后一个用户有 5001 个关注者,我将 5001 传递给存储过程,我得到 50 个用户,这些用户有 5000 个用户。但是还有 200 个用户,当我这次将 5000(上一次分页的最后一个数字)再次传递到我的存储过程时,它将跳过所有其余部分并为我带来 4xxx 关注者的用户。
我怎样才能带来具有相同粉丝数量的正确用户?
更正:我正在使用 Entity Framework 用于此目的,我张贴了 SQL 声明以便于理解。
只需跟踪您所在的第 # 页,然后您就可以使用 Skip and Take 为您进行分页:
var page=9; //Set to whatever page you want
var pageSize=50;
var results=db.Users
.OrderByDescending(u=>u.followerCount)
.ThenByDescending(u=>u.createDate)
.Skip((page-1)*pageSize)
.Take(pageSize);
如果您需要存储过程为您进行分页,那么您需要阅读如何 ROW_NUMBER OVER() works for older versions of SQL Server (pre-2012) or OFFSET FETCH 了解较新的过程。