linq 多条件查询 where 拼接+分页
2016-07-15 17:07
375 查看
首先定义一个静态类
定义Page类
查询方法
public static class QueryAssembly { /// <summary> /// 返回true /// </summary> /// <typeparam name="T"></typeparam> /// <returns></returns> public static Expression<Func<T, bool>> True<T>() { return f => true; } /// <summary> /// false /// </summary> /// <typeparam name="T"></typeparam> /// <returns></returns> public static Expression<Func<T, bool>> False<T>() { return f => false; } /// <summary> /// or /// </summary> /// <typeparam name="T"></typeparam> /// <param name="expr1"></param> /// <param name="expr2"></param> /// <returns></returns> public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1,Expression<Func<T, bool>> expr2) { var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>()); return Expression.Lambda<Func<T, bool>> (Expression.Or(expr1.Body, invokedExpr), expr1.Parameters); } /// <summary> /// and /// </summary> /// <typeparam name="T"></typeparam> /// <param name="expr1"></param> /// <param name="expr2"></param> /// <returns></returns> public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1,Expression<Func<T, bool>> expr2) { var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>()); return Expression.Lambda<Func<T, bool>> (Expression.And(expr1.Body, invokedExpr), expr1.Parameters); } }
定义Page类
public class Paging<T> { /// <summary> /// 当前页码 /// </summary> [DataMember] public int PageNo { get; set; } /// <summary> /// 总页数 /// </summary> [DataMember] public int PageCount { get; set; } /// <summary> /// 每页记录数 /// </summary> [DataMember] public int PageSize { get; set; } /// <summary> /// 总记录数 /// </summary> [DataMember] public int RecordCount { get; set; } /// <summary> /// 当前页的数据 /// </summary> [DataMember] public List<T> CurrentList { get; set; } }
查询方法
public Paging<DAML> QueryAJML(int pageNo, int pageSize,DAML data) { Paging<DAML> result = null; Expression<Func<DAML, bool>> ExpWhere = QueryAssembly.True<DAML>(); using (IStatelessSession session = _sessionFactory.OpenStatelessSession()) { var queryDAML = session.Query<DAML>(); if (!string.IsNullOrEmpty(data.MLH)) { ExpWhere=ExpWhere.Or(x=>x.MLH.Contains(data.MLH)); } if (!string.IsNullOrEmpty(data.QZH)) { ExpWhere = ExpWhere.Or(x => x.MLH.Contains(data.QZH)); } //查询 queryDAML.Where(ExpWhere); //排序 queryDAML.OrderBy(x=>x.ID); //页数 result.PageNo = pageNo; //每页记录数 result.PageSize = pageSize; //总记录数 result.RecordCount = queryDAML.Count(); //总页数 result.PageCount = (result.RecordCount + result.PageSize - 1) / result.PageSize; //返回数据 result.CurrentList = new List<DAML>(); result.CurrentList = queryDAML.ToList(); } return result; }
相关文章推荐
- ubi实际使用
- tcpdump 时报ServFail 0/0/1 (97)
- LeetCode 1.Two Sum ------------LeetCode 第一题
- 她是怎么跟陌生客户混熟的?
- Convert.ToInt16、Convert.ToInt32和Convert.ToInt64
- 网页制作工具
- mybatis自动生成
- 使用WebSocket实现图文直播功能
- x264框架概览
- SYN攻击
- 关于 .crash 分析
- 生成验证码
- 在线Topic
- 人月神话读书笔记(6)----贯彻执行
- 负载均衡
- IOS tabBarController的tabBarItem显示图片
- MATLAB小波分析工具箱使用(一)
- android可发中使用的十六进制颜色转换布局显示颜色
- 二分思想与分治法、排序思想
- Android中ListView分页加载更多数据