Created
February 7, 2022 01:53
-
-
Save halityurttas/0ed1b05357a08450ca027e9ee51a8af0 to your computer and use it in GitHub Desktop.
Csharp predicate builder
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Linq; | |
using System.Linq.Expressions; | |
using System.Collections.Generic; | |
public static class PredicateBuilder | |
{ | |
public static Expression<Func<T, bool>> True<T> () { return f => true; } | |
public static Expression<Func<T, bool>> False<T> () { return f => false; } | |
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.OrElse (expr1.Body, invokedExpr), expr1.Parameters); | |
} | |
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.AndAlso (expr1.Body, invokedExpr), expr1.Parameters); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment