selectprovider 分页_修改EFOracleProvider——解决分页排序问题
其实前面说的这些,支持9i啊,支持数据类型啊,支持自增长啊,或者是上网搜索就能解决,或者并不需要很高的技术含量。
但是支持分页排序的问题,可是花了我不少时间(净时间2天以上)。
我们知道,在oracle中是使用rownum来实现分页的,需要使用三层嵌套sql,如下
select t3.* from (
select t2.*, rownum as row_num from (
select * from t order by t.id asc
) t2 where rownum<=20
) t3
where t2.row_num>11
order by t3.id asc
如果你对SQL有疑问可以点击这里
而在EFOracleProvider中,生成的sql语句是这个样子的(在调试的时候,sql语句会在输出窗口打印出来)
select t2.* from (
select t.*, rownum as row_num from t where rownum<=20 order by ID asc
) t2 where t2.row_num>10
order by ID asc
所以我们需要在EFOracleProvider中,加入一层嵌套。
我们在EFOracleProvider中搜索"ROWNUM",很容易定位到 SqlGenerator.cs中,Visit(DbSkipExpression e) 实现了分页sql语句。
我们的目标是两层嵌套的sql语句里,再加1层嵌套,我们在
select t.*, rownum as row_num from t order by ID asc
外面加一个outer,主要代码如下
1 SqlSelectStatement outer = new SqlSelectStatement();
2outer.Select.Append("ROWNUM ");
3 outer.Select.Append("AS ");
4 outer.Select.Append(row_numberSymbol);
5 outer.From.Append("( ");
6 outer.From.Append(input);
7 outer.From.AppendLine();
8 outer.From.Append(") ");
9 selectStatementStack.Push(input);
10 symbolTable.EnterScope();
11 var outerSymbol = BuildSymbol(input, e, inputColumns);
12 AddFromSymbol(outer, e.Input.VariableName, outerSymbol);
13 AddDefaultColumns(outer);
14 symbolTable.ExitScope();
15 selectStatementStack.Pop();
其中第6行,就是将原来查询,作为outer.From子句部分。
修改过的EFOracleProvider下载
selectprovider 分页_修改EFOracleProvider——解决分页排序问题相关推荐
- php redis 分页查询,redis如何解决分页查询
我们都知道,通过缓存查询的结果,可以极大的提升系统的服务能力,以及降低底层服务或者是数据库的压力.对于有分页条件的缓存,我们也可以按照不同的分页条件来缓存多个key. 基于SortedSet的分页查询 ...
- 动软 mysql 分页_动软.NET 分页存储过程UP_GetRecordByPage
1, ------------------------------------ --用途:支持任意排序的分页存储过程 --说明: ----------------------------------- ...
- sqlserver 分页_四类数据库分页实现方案总结之PG分页实现
概述 前面介绍了Oracle.mysql.sqlserver的分页实现方案了,所以今天主要介绍一下关于PG的分页实现.传统的精准分页(能获取到总页数并且任意跳转页码)在需要符合条件的记录总数目,不过p ...
- java多页码分页_对页码进行分页
/*** 分页页码 *@paramtotalcount 记录总数 *@paramnum 每页记录数 *@paramindex 当前页码 *@paramparamstr 参数串&隔开,如:a=1 ...
- ldaptemplate 分页_长图片如何分页打印?3秒搞定|360浏览器|chrome浏览器
将永恒君的百宝箱设为星标 精品文章第一时间读 文章里面介绍的是用win自带的"画图"软件来进行设置和调节.这两天又发现一个更棒的技巧,和大家分享一下.这次需要用到的就是平常使用的浏 ...
- php手机端分页,destoon修改手机端分页
1. global.func.php pages函数和listpages函数 函数开头增加 $DT_TOUCH,$newsamplepages变量 global $DT_URL, $DT, $L,$D ...
- java jdbc分页_使用JDBC进行分页查询
package day03; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLExc ...
- MySQL分组分页优化_网站分页导航优化:解决标题重复和权重分散
如果大家有认真的看Alvin's Seo Blog博客中关于分页优化的文章,就可能知道网站分页对SEO会产生一些负面影响,而这些负面影响可能会对网站的用户体验造成一定的障碍,在目前百度非常重视用户体验 ...
- java混合分页_坑,MySQL中 order by 与 limit 混用,分页会出现问题!
在Mysql中我们常常用order by来进行排序,使用limit来进行分页,当需要先排序后分页时我们往往使用类似的写法select * from 表名 order by 排序字段 limt M,N. ...
最新文章
- 自定义报错返回_Keras编写自定义层--以GroupNormalization为例
- LSTM 为何如此有效?这五个秘密是你要知道的
- 用友服务器整体迁移--数据库附加
- Nginx_负载均衡配置讲解
- TypeScript类型检查机制
- 673. 最长递增子序列的个数
- 尼康d7200拍照_为什么尼康和佳能的全画幅旗舰单反却只有2000多万像素?
- leetcode5:最长回文子串
- 如何使用数据库可移植性将邮箱数据库还原到新服务器
- poj1200 Crazy Search(hash)
- NSIS制作安装包实例
- 双指针 -- 验证回文串
- 10.性能之巅 洞悉系统、企业与云计算 --- 网络
- simulink 学习(二)
- 使用NFC读卡器模拟加密门禁卡方法,包含小米手环
- android 声明一个空数组
- Window bat脚本教程
- “十三五”电力科技重大发展方向及关键技术
- Android开发周报:Android Studio2.0发布、Activity动态创建
- DIY BMP类 (接续)
热门文章
- 一天一点linux(17):安装与使用Tmux
- android-手势-基础知识总结
- 无法启动windows安全中心服务
- 完全二叉树的判断java,判断二叉树是否为完全二叉树的实例
- java 一级缓存,MyBatis一级缓存避坑完全指南
- 如何编制试算平衡表_试算平衡表的编制
- win8.1 库 计算机,Win8.1资源管理器库丢失?一键轻松找回
- go mysql delete_go 操作mysql、增删改查
- 进入android数据可视化,Android中的实时数据可视化
- 重新制作Docker镜像