using System; using System.Linq; using System.Linq.Expressions; namespace DJ.Helper { public static class PredicateBuilder { public static Expression> True () { return f => true; } public static Expression> False () { return f => false; } public static Expression> Or (this Expression> expr1, Expression> expr2) { var invokedExpr = Expression.Invoke (expr2, expr1.Parameters.Cast ()); return Expression.Lambda> (Expression.OrElse (expr1.Body, invokedExpr), expr1.Parameters); } public static Expression> And (this Expression> expr1, Expression> expr2) { var invokedExpr = Expression.Invoke (expr2, expr1.Parameters.Cast ()); return Expression.Lambda> (Expression.AndAlso (expr1.Body, invokedExpr), expr1.Parameters); } } }