oracle Provider先分页后排序的问题?
假设User表数据为:
ID	Username	CreateTime	SeqNum
Guid生成	111	1900/1/13 16:19	  6
Guid生成	112	1900/1/13 16:19	  3
Guid生成	113	1900/1/13 16:19	  2
Guid生成	114	1900/1/13 16:19	  5
Guid生成	115	1900/1/13 16:19	  4
Guid生成	116	1900/1/13 16:19	  1
Guid生成	117	1900/1/13 16:19	  7
Guid生成	118	1900/1/13 16:19	  9
Guid生成	119	1900/1/13 16:19	  8
Guid生成	120	1900/1/13 16:19	  10
Guid生成	121	1900/1/13 16:19	  16
Guid生成	122	1900/1/13 16:19	  13
Guid生成	123	1900/1/13 16:19	  14
Guid生成	124	1900/1/13 16:19	  12
Guid生成	125	1900/1/13 16:19	  11
Guid生成	126	1900/1/13 16:19	  17
Guid生成	128	1900/1/13 16:19	  20
Guid生成	129	1900/1/13 16:19	  19
Guid生成	130	1900/1/13 16:19	  15
Guid生成	131	1900/1/13 16:19	  18
测试了EntityFramework,在分页的时候,用的是类似下面的语句:
C# code
var query = from m in context.User
            select m;
query = query.OrderBy(item=>item.SeqNum);  //这里得出的query是能够正常按照SeqNum排序的
query = query.Skip(skip).Take(take);  //skip为跳过的记录数(假设为0),take为要取的记录数(假设为10)
//这里得出的query每页是能正常按SeqNum排序,但总体并不会按SeqNum排序
结果可能如下:
第一页:
ID	Username	CreateTime	SeqNum
Guid生成	116	1900/1/13 16:19	1
Guid生成	113	1900/1/13 16:19	2
Guid生成	115	1900/1/13 16:19	4
Guid生成	111	1900/1/13 16:19	6
Guid生成	117	1900/1/13 16:19	7
Guid生成	119	1900/1/13 16:19	8
Guid生成	118	1900/1/13 16:19	9
Guid生成	123	1900/1/13 16:19	14
Guid生成	130	1900/1/13 16:19	15
Guid生成	131	1900/1/13 16:19	18
第二页:
ID	Username	CreateTime	SeqNum
Guid生成	112	1900/1/13 16:19	3
Guid生成	114	1900/1/13 16:19	5
Guid生成	120	1900/1/13 16:19	10
Guid生成	125	1900/1/13 16:19	11
Guid生成	124	1900/1/13 16:19	12
Guid生成	122	1900/1/13 16:19	13
Guid生成	121	1900/1/13 16:19	16
Guid生成	126	1900/1/13 16:19	17
Guid生成	129	1900/1/13 16:19	19
Guid生成	128	1900/1/13 16:19	20
Oracle默认应该是根据一个伪列RowID来排序的。另外还有个RowNum。
怎样才能让排序变正常呢?
第一页的SeqNum应该是1-10,第二页的SeqNum应该是11-20.
Oracle Provider Beta1和Beta2都试过了,一样的结果...
------解决方案--------------------
Try use .ToList()
var query = (from m in context.User
           orderby m.SeqNum
           select m).ToList().Skip(skip).Take(take);
------解决方案--------------------.ToList()是非延迟查询操作符 会将数据全都加载到内存中
在DB中数据量到达一定数量级别后 肯定会影响查询性能
------解决方案--------------------顶一下
------解决方案--------------------MsSql 应该没问题,不知道是不是 Oracle 的原因。
------解决方案--------------------我也遇到这问题,难道只能跟ORACLE反映,在下个版本里改了?
哪个大牛来解决下。