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         }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM