linq 多条件查询 where 拼接+分页

首先定义一个静态类

 1 public static class QueryAssembly
 2     {
 3         /// <summary>
 4         /// 返回true
 5         /// </summary>
 6         /// <typeparam name="T"></typeparam>
 7         /// <returns></returns>
 8         public static Expression<Func<T, bool>> True<T>()
 9         { 
10             return f => true; 
11         }
12 
13         /// <summary>
14         /// false
15         /// </summary>
16         /// <typeparam name="T"></typeparam>
17         /// <returns></returns>
18         public static Expression<Func<T, bool>> False<T>() 
19         { 
20             return f => false; 
21         }
22 
23         /// <summary>
24         /// or
25         /// </summary>
26         /// <typeparam name="T"></typeparam>
27         /// <param name="expr1"></param>
28         /// <param name="expr2"></param>
29         /// <returns></returns>
30         public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1,Expression<Func<T, bool>> expr2)
31         {
32             var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
33             return Expression.Lambda<Func<T, bool>>
34                   (Expression.Or(expr1.Body, invokedExpr), expr1.Parameters);
35         }
36 
37         /// <summary>
38         /// and
39         /// </summary>
40         /// <typeparam name="T"></typeparam>
41         /// <param name="expr1"></param>
42         /// <param name="expr2"></param>
43         /// <returns></returns>
44         public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1,Expression<Func<T, bool>> expr2)
45         {
46             var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
47             return Expression.Lambda<Func<T, bool>>
48                   (Expression.And(expr1.Body, invokedExpr), expr1.Parameters);
49         }  
50     }

定义Page类

 1 public class Paging<T>
 2     {
 3         /// <summary>
 4         /// 当前页码
 5         /// </summary>
 6         [DataMember]
 7         public int PageNo { get; set; }
 8 
 9         /// <summary>
10         /// 总页数
11         /// </summary>
12         [DataMember]
13         public int PageCount { get; set; }
14 
15         /// <summary>
16         /// 每页记录数
17         /// </summary>
18         [DataMember]
19         public int PageSize { get; set; }
20 
21         /// <summary>
22         /// 总记录数
23         /// </summary>
24         [DataMember]
25         public int RecordCount { get; set; }
26 
27         /// <summary>
28         /// 当前页的数据
29         /// </summary>
30         [DataMember]
31         public List<T> CurrentList { get; set; }
32     }

查询方法

 1 public Paging<DAML> QueryAJML(int pageNo, int pageSize,DAML data)
 2         {
 3             Paging<DAML> result = null;
 4             Expression<Func<DAML, bool>> ExpWhere = QueryAssembly.True<DAML>(); 
 5             using (IStatelessSession session = _sessionFactory.OpenStatelessSession())
 6             {
 7                 var queryDAML = session.Query<DAML>();
 8 
 9                 if (!string.IsNullOrEmpty(data.MLH))
10                 {
11                     ExpWhere=ExpWhere.Or(x=>x.MLH.Contains(data.MLH));
12                 }
13 
14                 if (!string.IsNullOrEmpty(data.QZH))
15                 {
16                     ExpWhere = ExpWhere.Or(x => x.MLH.Contains(data.QZH));
17                 }
18 
19                 //查询
20                 queryDAML.Where(ExpWhere);
21 
22                 //排序
23                 queryDAML.OrderBy(x=>x.ID);
24 
25                 //页数
26                 result.PageNo = pageNo;
27                 //每页记录数
28                 result.PageSize = pageSize;
29                 //总记录数
30                 result.RecordCount = queryDAML.Count();
31                 //总页数
32                 result.PageCount = (result.RecordCount + result.PageSize - 1) / result.PageSize;
33                 //返回数据
34                 result.CurrentList = new List<DAML>();
35                 result.CurrentList = queryDAML.ToList();
36             }
37             return result;
38         }

 

posted @ 2016-07-15 17:07  garsonguo  阅读(5215)  评论(1编辑  收藏  举报