How about this?
public static Expression<Func<T, bool>> BinaryOp<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2, Func<Expression, Expression, BinaryExpression> operation) { ParameterExpression parameter = Expression.Parameter(typeof(T)); ReplaceExpressionVisitor leftVisitor = new ReplaceExpressionVisitor(expr1.Parameters[0], parameter); Expression left = leftVisitor.Visit(expr1.Body); ReplaceExpressionVisitor rightVisitor = new ReplaceExpressionVisitor(expr2.Parameters[0], parameter); Expression right = rightVisitor.Visit(expr2.Body); return Expression.Lambda<Func<T, bool>>(operation(left, right), parameter); } public static Expression<Func<T, bool>> OrElse<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2) { return BinaryOp(expr1, expr2, Expression.OrElse);
user2160375
source share