首页 新闻 会员 周边 捐助

EF中分页查询的坑,你知道吗?

0
悬赏园豆:100 [已解决问题] 解决于 2016-08-19 13:14

EF6.0 数据库Sql Server2008 排序生成的sql 是使用了 RowNumber 没有任何问题。

EF6.0 数据库Sql Server2012 排序生成的sql 是使用了 OFFSET/FETCH NEXT,一般情况也是没有问题的。不过有个特殊情况,如果排序字段值是一样的,就没法分页了。如:(如果Name值一样的话)

  SELECT    *
  FROM      [dbo].[Assets] AS [Extent1]  
  ORDER BY  [Extent1].[Name] DESC
            OFFSET 11 ROWS FETCH NEXT 4 ROWS ONLY; 

 

请问大神有遇到这种情况吗?

除了修改排序字段、增加唯一字段排序、手写RowNumber 可有其他解决方案?

农码一生的主页 农码一生 | 菜鸟二级 | 园豆:318
提问于:2016-08-08 10:07
< >
分享
最佳答案
0

加一个自增字段用来排序

收获园豆:15
刘宏玺 | 专家六级 |园豆:14020 | 2016-08-08 11:31
其他回答(7)
0

一般是加一个排序字段

收获园豆:15
小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2016-08-08 10:35
0

你是让他默认排序么?

收获园豆:15
顾晓北 | 园豆:10898 (专家六级) | 2016-08-08 10:38

不是,本来使用创建时间排序。(可是有种情况,导入的数据创建时间都是一样的。导致无法分页。

支持(1) 反对(0) 农码一生 | 园豆:318 (菜鸟二级) | 2016-08-08 10:41

@农码一生: 这不很正常吗?一样的值就算随机分布那也是已排序了.程序员不要跟业务一样搞不清楚基本原则.

1L已经说了.既然这个字段是一样的.那就再加个二级排序字段.比如ID.

支持(0) 反对(1) 吴瑞祥 | 园豆:29449 (高人七级) | 2016-08-08 11:08
0

你可以批量修改下时间,时间+行号,这样子时间就区分了

收获园豆:15
下一个季节 | 园豆:231 (菜鸟二级) | 2016-08-08 14:43
0

加个唯一排序字段不就行了吗?

收获园豆:15
blog_zt | 园豆:242 (菜鸟二级) | 2016-08-09 13:45
0

这个肯定是的  既然是排序排序  肯定是要有顺序才能排

你没有能排序的字段  自然是设计问题

增加一个自增字段就可以了  以自增来排序

收获园豆:15
艾尼路 | 园豆:116 (初学一级) | 2016-08-12 09:41
0

我也遇到了这个问题,加个主键排序就可以了

收获园豆:10
平飞 | 园豆:212 (菜鸟二级) | 2016-08-14 01:06
0

最近也遇到了这个问题,

realyrare | 园豆:214 (菜鸟二级) | 2017-10-21 14:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册