LINQ & SQL 服务器:从起始行开始排序

LINQ & SQL Server : order by from starting row

我有一个 table,它包含三列:usernamefollowerCountCreateDate

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 了解较新的过程。