本人新手刚在webform转到mvc   像linq  ef啥的,都是不会的不行不行的,不会就问群友,找资料

今天本屌遇到了一个分页组合查询的问题,解决了2个小时,把代码共享给大家

话不多话,直接上代码,理论上的东东我就不描述,初中没毕业文化太低也描述不了

新建一个表达式数的操作类

  1. public static class PredicateBuilder
  2. {
  3.  
  4. public static Expression<Func<T, bool>> True<T>() { return f => true; }
  5. public static Expression<Func<T, bool>> False<T>() { return f => false; }
  6. public static Expression<T> Compose<T>(this Expression<T> first, Expression<T> second, Func<Expression, Expression, Expression> merge)
  7. {
  8. // build parameter map (from parameters of second to parameters of first)
  9. var map = first.Parameters.Select((f, i) => new { f, s = second.Parameters[i] }).ToDictionary(p => p.s, p => p.f);
  10.  
  11. // replace parameters in the second lambda expression with parameters from the first
  12. var secondBody = ParameterRebinder.ReplaceParameters(map, second.Body);
  13.  
  14. // apply composition of lambda expression bodies to parameters from the first expression
  15. return Expression.Lambda<T>(merge(first.Body, secondBody), first.Parameters);
  16. }
  17.  
  18. public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> first, Expression<Func<T, bool>> second)
  19. {
  20. return first.Compose(second, Expression.And);
  21. }
  22.  
  23. public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> first, Expression<Func<T, bool>> second)
  24. {
  25. return first.Compose(second, Expression.Or);
  26. }
  27. }
  28.  
  29. public class ParameterRebinder : ExpressionVisitor
  30. {
  31. private readonly Dictionary<ParameterExpression, ParameterExpression> map;
  32.  
  33. public ParameterRebinder(Dictionary<ParameterExpression, ParameterExpression> map)
  34. {
  35. this.map = map ?? new Dictionary<ParameterExpression, ParameterExpression>();
  36. }
  37.  
  38. public static Expression ReplaceParameters(Dictionary<ParameterExpression, ParameterExpression> map, Expression exp)
  39. {
  40. return new ParameterRebinder(map).Visit(exp);
  41. }
  42.  
  43. protected override Expression VisitParameter(ParameterExpression p)
  44. {
  45. ParameterExpression replacement;
  46. if (map.TryGetValue(p, out replacement))
  47. {
  48. p = replacement;
  49. }
  50. return base.VisitParameter(p);
  51. }
  52. }

基本的做好,下一步就是调用了

代码  下看

  1. //获取页容量
  2. int pageSize = FytRequest.GetFormInt("rows", );
  3. //获取请求的页码
  4. int pageIndex = FytRequest.GetFormInt("page", );
  5. var key = FytRequest.GetFormStringEncode("key");
  6. int statu = FytRequest.GetFormInt("statu");
  7. var begintime = FytRequest.GetFormString("begintime");
  8. var endtime = FytRequest.GetFormString("endtime");
  9. var where = PredicateBuilder.True<tb_SystemLog>();
  10. #region 组合查询
  11. if (key!="")
  12. {
  13. where = where.And(m => m.loginName.Contains(key));
  14. where = where.Or(m=>m.title.Contains(key));
  15. }
  16. if (statu!=-)
  17. {
  18. where = where.And(m=>m.logType==statu);
  19. }
  20. if (begintime != "" && endtime != "")
  21. {
  22. var bt = Convert.ToDateTime(begintime);
  23. var et = Convert.ToDateTime(endtime);
  24. where = where.And(m => m.addDate >= bt && m.addDate <= et);
  25. }
  26. #endregion
  27. var dataList = OperateContext.BLLSession.Itb_SystemLogBLL.GetPagedList(pageIndex, pageSize, where, p => p.ID);
  28. int rowCount = OperateContext.BLLSession.Itb_SystemLogBLL.GetListBy(where).Count();
  29. var jsonM = new JsonHelper.JsonAjaxModel()
  30. {
  31. Data = dataList,
  32. PageTotal = ,
  33. Status = "ok"
  34. };

ok好了,这样就可以用了,我这个分页内部是接口做的,

爽来的,我把分页实现也分享给大家,

  1. #region 6.0 分页查询 + List<T> GetPagedList<TKey>
  2. /// <summary>
  3. /// 6.0 分页查询 + List<T> GetPagedList<TKey>
  4. /// </summary>
  5. /// <param name="pageIndex">页码</param>
  6. /// <param name="pageSize">页容量</param>
  7. /// <param name="whereLambda">条件 lambda表达式</param>
  8. /// <param name="orderBy">排序 lambda表达式</param>
  9. /// <returns></returns>
  10. public List<T> GetPagedList<TKey>(int pageIndex, int pageSize, Expression<Func<T, bool>> whereLambda, Expression<Func<T, TKey>> orderBy)
  11. {
  12. // 分页 一定注意: Skip 之前一定要 OrderBy
  13. return whereLambda == null ?
  14. db.Set<T>().OrderBy(orderBy).Skip((pageIndex - ) * pageSize).Take(pageSize).ToList() :
  15. db.Set<T>().Where(whereLambda).OrderBy(orderBy).Skip((pageIndex - ) * pageSize).Take(pageSize).ToList();
  16. }
  17.  
  18. #endregion

有些人可能看代码很熟悉,就不要拆穿了,你懂得

交流:86594082 有事情可以找我哈,共同学习

ASP.NETMVC4 分页组合查询解决方法的更多相关文章

  1. ASP.NET 分页+组合查询 练习

    分页和组合查询都是通过拼接SQL语句到数据库查询进行实现 到汽车表(car)中查询 ,汽车表选取了“编号 code”,“车名 name”,“日期 time”,“油耗 oil ”,“马力 powers” ...

  2. Linq组合查询与分页组合查询结合

    1.组合查询 <div>姓名:<asp:TextBox ID="T1" runat="server"></asp:TextBox& ...

  3. webform:分页组合查询

    一个简单的分页组合查询页面 /// <summary> /// 查询方法 /// </summary> /// <param name="tsql"& ...

  4. 【2017-06-02】Linq高级查询,实现分页组合查询。

    1.以XXX开头 2.以XXX结尾 3.模糊查询 4.求个数 5.求最大值 6.求最小值 7.求平均值 8.求和 9.升序 10.降序 11.分页 Skip()跳过多少条 Take()取多少条 12. ...

  5. asp.net oracle 中文乱码 解决方法

    asp.net oracle 中文乱码 解决方法 不需要去修改oracle以及client的字符集,只需要在web.config中连接字符串上加上 Unicode=True 问题解决. <add ...

  6. 【php】thinkphp以post方式查询时分页失效的解决方法

    好久没有写博客了,最近说实话有点忙,各个项目都需要改bug.昨天晚上一直没有解决的php项目中的bug,就在刚才终于搞定,在这里还需要感谢博客园大神给的帮助! 具体问题描述 最近遇到一个非常棘手的问题 ...

  7. Webform--LinQ 分页组合查询

    一.linq高级查 1.模糊查(字符串包含) public List<User> Select(string name) { return con.User.Where(r => r ...

  8. 【分页问题】elasticsearch 深分页问题以及解决方法

    本文主要参考: 1.https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html ...

  9. linq分页组合查询

    一.linq高级查 1.模糊查(字符串包含) 1 public List<User> Select(string name) 2 { 3 return con.User.Where(r = ...

随机推荐

  1. AES 加密填充 PKCS #7

    使用算法AES的时候,涉及到数据填充的部分,数据的填充有很多种方案,用的比较多的有pkcs#5,pkcs#7, 下面的都是从网上转来的.结论就是在AES 的使用中,pkcs#5填充和pkcs#7填充没 ...

  2. application-defined exception

    dataSnap服务器,客户端调用的时候写错了一句话, SQLConnection1->CloneConnection(); 改为 SQLConnection1->Close(); 就好了 ...

  3. iPhone开发随想:rand()还是arc4random()

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://bj007.blog.51cto.com/1701577/544006 今天在iP ...

  4. T-SQL 重复读(Double Read)问题的理解

    我的理解是: step1,假设表里有100行有序记录, 事务1从row 1 开始读取到了row 50 并准备继续读取完这100行. 要注意的是,sql server 会自动释放已经读取了的row的锁. ...

  5. Android基础之sqlite 数据库简单操作

    尽管很简单,但是也存下来,以后直接粘过去就能用了. public class DBHelper extends SQLiteOpenHelper {      private static final ...

  6. Spark之 使用SparkSql操作Hive的Scala程序实现

    依赖 <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-hive_2 ...

  7. easyui 验证框

    转自:http://blog.csdn.net/pqszq1314/article/details/25896163 例如 校验输入框只能录入0-1000之间 最多有2位小数的数字 表单<inp ...

  8. sql解决主键冲突

    在数据插入的时候,假设主键对应的值已经存在,则插入失败!这就是主键冲突.当主键存在冲突(duplicate key)的时候,可以选择性的进行处理,即忽略.更新或者替换. 1.忽略 insert ign ...

  9. 小程序动态生成二维码,生成image图片

    前端: <image src="{{img_usrl}}" style="width:100%;height:104px;" bindlongtap=&q ...

  10. android-tip-关于SpannableString的使用

    如果想单独设置TextView上其中几个字的样式,该怎么办? 答案是使用SpannableString. 使用SpannableString可以为TextView上的某字或某些字设置: 前景色(For ...