PredicateBuilder.cs 1.0 KB

123456789101112131415161718192021222324252627
  1. using System;
  2. using System.Linq;
  3. using System.Linq.Expressions;
  4. namespace Abp.Linq.Expressions
  5. {
  6. internal static class PredicateBuilder
  7. {
  8. public static Expression<Func<T, bool>> True<T>() { return f => true; }
  9. public static Expression<Func<T, bool>> False<T>() { return f => false; }
  10. public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2)
  11. {
  12. var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
  13. return Expression.Lambda<Func<T, bool>>(Expression.OrElse(expr1.Body, invokedExpr), expr1.Parameters);
  14. }
  15. public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2)
  16. {
  17. var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
  18. return Expression.Lambda<Func<T, bool>>(Expression.AndAlso(expr1.Body, invokedExpr), expr1.Parameters);
  19. }
  20. }
  21. }