ASP.NETMVC4 分页组合查询解决方法
本人新手刚在webform转到mvc 像linq ef啥的,都是不会的不行不行的,不会就问群友,找资料
今天本屌遇到了一个分页组合查询的问题,解决了2个小时,把代码共享给大家
话不多话,直接上代码,理论上的东东我就不描述,初中没毕业文化太低也描述不了
新建一个表达式数的操作类
- public static class PredicateBuilder
- {
- public static Expression<Func<T, bool>> True<T>() { return f => true; }
- public static Expression<Func<T, bool>> False<T>() { return f => false; }
- public static Expression<T> Compose<T>(this Expression<T> first, Expression<T> second, Func<Expression, Expression, Expression> merge)
- {
- // build parameter map (from parameters of second to parameters of first)
- var map = first.Parameters.Select((f, i) => new { f, s = second.Parameters[i] }).ToDictionary(p => p.s, p => p.f);
- // replace parameters in the second lambda expression with parameters from the first
- var secondBody = ParameterRebinder.ReplaceParameters(map, second.Body);
- // apply composition of lambda expression bodies to parameters from the first expression
- return Expression.Lambda<T>(merge(first.Body, secondBody), first.Parameters);
- }
- public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> first, Expression<Func<T, bool>> second)
- {
- return first.Compose(second, Expression.And);
- }
- public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> first, Expression<Func<T, bool>> second)
- {
- return first.Compose(second, Expression.Or);
- }
- }
- public class ParameterRebinder : ExpressionVisitor
- {
- private readonly Dictionary<ParameterExpression, ParameterExpression> map;
- public ParameterRebinder(Dictionary<ParameterExpression, ParameterExpression> map)
- {
- this.map = map ?? new Dictionary<ParameterExpression, ParameterExpression>();
- }
- public static Expression ReplaceParameters(Dictionary<ParameterExpression, ParameterExpression> map, Expression exp)
- {
- return new ParameterRebinder(map).Visit(exp);
- }
- protected override Expression VisitParameter(ParameterExpression p)
- {
- ParameterExpression replacement;
- if (map.TryGetValue(p, out replacement))
- {
- p = replacement;
- }
- return base.VisitParameter(p);
- }
- }
基本的做好,下一步就是调用了
代码 下看
- //获取页容量
- int pageSize = FytRequest.GetFormInt("rows", );
- //获取请求的页码
- int pageIndex = FytRequest.GetFormInt("page", );
- var key = FytRequest.GetFormStringEncode("key");
- int statu = FytRequest.GetFormInt("statu");
- var begintime = FytRequest.GetFormString("begintime");
- var endtime = FytRequest.GetFormString("endtime");
- var where = PredicateBuilder.True<tb_SystemLog>();
- #region 组合查询
- if (key!="")
- {
- where = where.And(m => m.loginName.Contains(key));
- where = where.Or(m=>m.title.Contains(key));
- }
- if (statu!=-)
- {
- where = where.And(m=>m.logType==statu);
- }
- if (begintime != "" && endtime != "")
- {
- var bt = Convert.ToDateTime(begintime);
- var et = Convert.ToDateTime(endtime);
- where = where.And(m => m.addDate >= bt && m.addDate <= et);
- }
- #endregion
- var dataList = OperateContext.BLLSession.Itb_SystemLogBLL.GetPagedList(pageIndex, pageSize, where, p => p.ID);
- int rowCount = OperateContext.BLLSession.Itb_SystemLogBLL.GetListBy(where).Count();
- var jsonM = new JsonHelper.JsonAjaxModel()
- {
- Data = dataList,
- PageTotal = ,
- Status = "ok"
- };
ok好了,这样就可以用了,我这个分页内部是接口做的,
爽来的,我把分页实现也分享给大家,
- #region 6.0 分页查询 + List<T> GetPagedList<TKey>
- /// <summary>
- /// 6.0 分页查询 + List<T> GetPagedList<TKey>
- /// </summary>
- /// <param name="pageIndex">页码</param>
- /// <param name="pageSize">页容量</param>
- /// <param name="whereLambda">条件 lambda表达式</param>
- /// <param name="orderBy">排序 lambda表达式</param>
- /// <returns></returns>
- public List<T> GetPagedList<TKey>(int pageIndex, int pageSize, Expression<Func<T, bool>> whereLambda, Expression<Func<T, TKey>> orderBy)
- {
- // 分页 一定注意: Skip 之前一定要 OrderBy
- return whereLambda == null ?
- db.Set<T>().OrderBy(orderBy).Skip((pageIndex - ) * pageSize).Take(pageSize).ToList() :
- db.Set<T>().Where(whereLambda).OrderBy(orderBy).Skip((pageIndex - ) * pageSize).Take(pageSize).ToList();
- }
- #endregion
有些人可能看代码很熟悉,就不要拆穿了,你懂得
交流:86594082 有事情可以找我哈,共同学习
ASP.NETMVC4 分页组合查询解决方法的更多相关文章
- ASP.NET 分页+组合查询 练习
分页和组合查询都是通过拼接SQL语句到数据库查询进行实现 到汽车表(car)中查询 ,汽车表选取了“编号 code”,“车名 name”,“日期 time”,“油耗 oil ”,“马力 powers” ...
- Linq组合查询与分页组合查询结合
1.组合查询 <div>姓名:<asp:TextBox ID="T1" runat="server"></asp:TextBox& ...
- webform:分页组合查询
一个简单的分页组合查询页面 /// <summary> /// 查询方法 /// </summary> /// <param name="tsql"& ...
- 【2017-06-02】Linq高级查询,实现分页组合查询。
1.以XXX开头 2.以XXX结尾 3.模糊查询 4.求个数 5.求最大值 6.求最小值 7.求平均值 8.求和 9.升序 10.降序 11.分页 Skip()跳过多少条 Take()取多少条 12. ...
- asp.net oracle 中文乱码 解决方法
asp.net oracle 中文乱码 解决方法 不需要去修改oracle以及client的字符集,只需要在web.config中连接字符串上加上 Unicode=True 问题解决. <add ...
- 【php】thinkphp以post方式查询时分页失效的解决方法
好久没有写博客了,最近说实话有点忙,各个项目都需要改bug.昨天晚上一直没有解决的php项目中的bug,就在刚才终于搞定,在这里还需要感谢博客园大神给的帮助! 具体问题描述 最近遇到一个非常棘手的问题 ...
- Webform--LinQ 分页组合查询
一.linq高级查 1.模糊查(字符串包含) public List<User> Select(string name) { return con.User.Where(r => r ...
- 【分页问题】elasticsearch 深分页问题以及解决方法
本文主要参考: 1.https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html ...
- linq分页组合查询
一.linq高级查 1.模糊查(字符串包含) 1 public List<User> Select(string name) 2 { 3 return con.User.Where(r = ...
随机推荐
- AES 加密填充 PKCS #7
使用算法AES的时候,涉及到数据填充的部分,数据的填充有很多种方案,用的比较多的有pkcs#5,pkcs#7, 下面的都是从网上转来的.结论就是在AES 的使用中,pkcs#5填充和pkcs#7填充没 ...
- application-defined exception
dataSnap服务器,客户端调用的时候写错了一句话, SQLConnection1->CloneConnection(); 改为 SQLConnection1->Close(); 就好了 ...
- iPhone开发随想:rand()还是arc4random()
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://bj007.blog.51cto.com/1701577/544006 今天在iP ...
- T-SQL 重复读(Double Read)问题的理解
我的理解是: step1,假设表里有100行有序记录, 事务1从row 1 开始读取到了row 50 并准备继续读取完这100行. 要注意的是,sql server 会自动释放已经读取了的row的锁. ...
- Android基础之sqlite 数据库简单操作
尽管很简单,但是也存下来,以后直接粘过去就能用了. public class DBHelper extends SQLiteOpenHelper { private static final ...
- Spark之 使用SparkSql操作Hive的Scala程序实现
依赖 <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-hive_2 ...
- easyui 验证框
转自:http://blog.csdn.net/pqszq1314/article/details/25896163 例如 校验输入框只能录入0-1000之间 最多有2位小数的数字 表单<inp ...
- sql解决主键冲突
在数据插入的时候,假设主键对应的值已经存在,则插入失败!这就是主键冲突.当主键存在冲突(duplicate key)的时候,可以选择性的进行处理,即忽略.更新或者替换. 1.忽略 insert ign ...
- 小程序动态生成二维码,生成image图片
前端: <image src="{{img_usrl}}" style="width:100%;height:104px;" bindlongtap=&q ...
- android-tip-关于SpannableString的使用
如果想单独设置TextView上其中几个字的样式,该怎么办? 答案是使用SpannableString. 使用SpannableString可以为TextView上的某字或某些字设置: 前景色(For ...