欢迎来到天天文库
浏览记录
ID:14397419
大小:2.71 MB
页数:148页
时间:2018-07-28
《动态多条件查询分页以及排序(一)--mvc与entity framework版url分页版》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、因为此设置被禁用,所订阅的源没有被自动更新。打开自动源更新您已成功订阅此源!可以在InternetExplorer及使用“常见源列表”的其他程序中查看更新内容。查看我的源您已成功订阅此源!博客园_love.net您正在查看的源包含频繁更新的内容。订阅源后,该源会添加到“常见源列表”中。该源的更新信息会自动下载到计算机,通过InternetExplorer及其他程序可以查看这些信息。进一步了解源。订阅该源博客园_love.net2012年12月4日,8:46:24动态多条件查询分页以及排序(一)--MVC与
2、EntityFramework版url分页版2012年12月4日,8:46:00
3、wlf一.前言多条件查询分页以及排序每个系统里都会有这个的代码做好这块可以大大提高开发效率所以博主分享下自己的6个版本的多条件查询分页以及排序二.目前状况不论是ado.net还是EF在做多条件搜索时都有这类似的代码这样有几个不好的地方1.当增加查询条件,需要改代码,对应去写相应的代码。2.对多表查询以及or的支持不是很好。而我们很常见的需求不可能是一个表的查询3.这样写表示层直接出现了SQL语句或者linq的拉姆达表达式这是
4、很不好的表示层不应该知道数据访问技术4.有的时候我们的业务逻辑层接口是这样的IList<***>seach(stringname,stringage,stringclassname,intpageindex,intpagesize,stringoderby)这个时候多一个查询条件对应的还要去修改业务逻辑层EF由于传递的是表达式树,则更是苦不堪言.三.我们接下来应该实现的目标1.当增加条件时不需要修改代码只需要在view上增加相应的查询框即可2.我们的多条件查询应该做到无关表示层技术(是否是MVC或webf
5、orm)3.应该支持多表查询以及OR的操作4.应该支持更多的查询likein不等于等操作5.关于分页不应该与数据访问耦合在一起个人感觉分页只需要知道总条数以及当前页数和每页多少条然后生成分页代码即可不应该与EF等耦合到一起分页应该是独立出来可控制的6.客户可以自己添加搜索条件这是个强大的功能想怎么查客户自己添加即可7.统一查询接口做到有条件增加不修改代码8.分页应该支持url重写或者mvc路由不应该生成的连接只是?pageindex=值这种的四.我实现的几个多条件查询分页版本以适应各种需求(每篇会写一个版
6、本的实现以及代码的提供,有好意见的欢迎留言)1.urlget提交版实现URL分页多条件查询以及排序的好处是我们可以把当前的搜索条件当前页数排序等都在url上显示可以方便的发给好友以及后退等浏览器操作(个人给dudu老大建议,博客园应该做成这种的)2.post提交版本的搜索条件较大不适合用url的3.ajax+mvc版本的(关于AJAX实现我认为有两种1.服务端实现好内容的拼接,传输给客户端2直接传递json给客户端客户端来做拼接)这个版本会实现服务端拼接内容好处是服务端做拼接简单能做更多的事情维护服务端代
7、码方便尤其是强大的Razor4.ajax+webapi+Knockoutjs版本这个版本我实现的是服务端只是传递json这样服务端效率很高喜欢这样开发方式的朋友就是前端拼接字符是很不好的代码会显得很乱这个时候前端就需要一个模版引擎我用的是jquery-temp配合强大的Knockoutjs5.动态增加查询条件版这个版本我实现的是客户可以自己添加查询条件查询条件是动态的6.移植到webform版7.EF应该得到表达式树让EF自己生成SQL语句这样方便扩展实现其他方法五.urlget提交版开始废话了那么多今天
8、就写下urlget版的多条件查询以及分页排序先上个丑陋界面的截图界面虽丑但是功能齐全查询分页排序齐全看下控制器的代码我们这里没有各种条件判断判断哪个为空使用哪个排序的判断我们的业务逻辑层接口没有接受表达式树的参数与数据访问层不是耦合的而是使用了Querymodel对象来抽象所有查询条件这样这个对象可以翻译成EF的表达式树也可以翻译成SQL语句所以我们的表示层MVC不用非要使用EF的的底层而我们的分页只需要知道当前页数总数据以及每页大小去自动生成分页关于分页很多人喜欢把这个扩展htmlhelper做成htm
9、l.pager这种做法这样很多表示层的展示都会耦合到这个里面举个例子,比如把分页的布局从table变成ul这样的这是纯表示层的本应该修改view现在却要去改htmlhelper而且你的分页代码越强大则htmlhelper里的内容越多修改起来越不容易所以我的意见是做分页的最好使用html.Partial然后把分页的逻辑写到部分页里这样就实现了分页只关注分页与其他的一切都没有关系我们要做的就是构建Pager类然后传递给模版即可例如
此文档下载收益归作者所有