懒羊羊
2023-12-28 e46d3baaf3e8d7d85f4bafec3aad75e52b078408
提交 | 用户 | 时间
e46d3b 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Linq.Expressions;
5 using System.Text;
6
7 namespace YX.BLL
8 {
9     public static class PredicateBuilder
10     {
11
12         /// <summary>
13         /// 机关函数应用True时:单个AND有效,多个AND有效;单个OR无效,多个OR无效;混应时写在AND后的OR有效 
14         /// </summary>
15         /// <typeparam name="T"></typeparam>
16         /// <returns></returns>
17         public static Expression<Func<T, bool>> True<T>() { return f => true; }
18
19         /// <summary>
20         /// 机关函数应用False时:单个AND无效,多个AND无效;单个OR有效,多个OR有效;混应时写在OR后面的AND有效 
21         /// </summary>
22         /// <typeparam name="T"></typeparam>
23         /// <returns></returns>
24         public static Expression<Func<T, bool>> False<T>() { return f => false; }
25
26         public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2)
27         {
28             var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
29             return Expression.Lambda<Func<T, bool>>(Expression.Or(expr1.Body, invokedExpr), expr1.Parameters);
30         }
31
32         public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2)
33         {
34             var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
35             return Expression.Lambda<Func<T, bool>>(Expression.And(expr1.Body, invokedExpr), expr1.Parameters);
36         }
37     }
38 }