首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

oracle Provider先分页后排序的有关问题

2012-03-17 
oracle Provider先分页后排序的问题?假设User表数据为:IDUsernameCreateTimeSeqNumGuid生成1111900/1/13 1

oracle Provider先分页后排序的问题?
假设User表数据为:
IDUsernameCreateTimeSeqNum
Guid生成1111900/1/13 16:19 6
Guid生成1121900/1/13 16:19 3
Guid生成1131900/1/13 16:19 2
Guid生成1141900/1/13 16:19 5
Guid生成1151900/1/13 16:19 4
Guid生成1161900/1/13 16:19 1
Guid生成1171900/1/13 16:19 7
Guid生成1181900/1/13 16:19 9
Guid生成1191900/1/13 16:19 8
Guid生成1201900/1/13 16:19 10
Guid生成1211900/1/13 16:19 16
Guid生成1221900/1/13 16:19 13
Guid生成1231900/1/13 16:19 14
Guid生成1241900/1/13 16:19 12
Guid生成1251900/1/13 16:19 11
Guid生成1261900/1/13 16:19 17
Guid生成1281900/1/13 16:19 20
Guid生成1291900/1/13 16:19 19
Guid生成1301900/1/13 16:19 15
Guid生成1311900/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排序

结果可能如下:
第一页:

IDUsernameCreateTimeSeqNum
Guid生成1161900/1/13 16:191
Guid生成1131900/1/13 16:192
Guid生成1151900/1/13 16:194
Guid生成1111900/1/13 16:196
Guid生成1171900/1/13 16:197
Guid生成1191900/1/13 16:198
Guid生成1181900/1/13 16:199
Guid生成1231900/1/13 16:1914
Guid生成1301900/1/13 16:1915
Guid生成1311900/1/13 16:1918

第二页:

IDUsernameCreateTimeSeqNum
Guid生成1121900/1/13 16:193
Guid生成1141900/1/13 16:195
Guid生成1201900/1/13 16:1910
Guid生成1251900/1/13 16:1911
Guid生成1241900/1/13 16:1912
Guid生成1221900/1/13 16:1913
Guid生成1211900/1/13 16:1916
Guid生成1261900/1/13 16:1917
Guid生成1291900/1/13 16:1919
Guid生成1281900/1/13 16:1920

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反映,在下个版本里改了?
哪个大牛来解决下。

热点排行