LINQ& SQL Server:从起始行开始排序

时间:2015-11-23 02:20:57

标签: sql-server entity-framework partial-ordering sql-order-by

我的表格有三列:usernamefollowerCountCreateDate

表格中有大约110000名用户,我正在尝试显示followerCount订购的用户。我这样做:

select top 50 * 
from Users 
where followerCount <= @followerCount
order by followerCount desc, createDate desc

因此,对于第二页,我从第一页开始传递followerCount,接收下一页,依此类推。

但是表中有一些用户他们有相同的关注者数量。例如,有250个用户拥有5000个粉丝。因此,当我进行分页时,我无法正确获取下一页,因为有更多用户拥有5000个粉丝。

例如我在第9页,最后一个用户有5001个关注者,我将5001传递给存储过程,我得到50个拥有5000个用户的用户。但是有200个用户更多,当我将这个时间5000(从prev分页的最后一个号码)再次传递到我的存储过程时,它将跳过所有其余的并带给我4xxx粉丝的用户。

如何为具有相同数量关注者的正确用户提供帮助?

更正:我正在使用实体框架,我发布了SQL语句以便于理解。

1 个答案:

答案 0 :(得分:0)

只需跟踪您所在的页面,然后您就可以使用“跳过”和“摘机”为您进行分页:

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()如何适用于旧版本的SQL Server(2012之前)或OFFSET FETCH适用于较新版本的SQL Server