public static Expression <Func <T, bool> > AddWithAnd <T>(this Expression <Func <T, bool> > expr1, Expression <Func <T, bool> > expr2) { if (expr1 == null) { return(expr2); } var replacer = new ExpressionReplacer(CreateFromToReplaceSet(expr2.Parameters, expr1.Parameters), null, null, null, null); var rightExpression = (LambdaExpression)replacer.HandleExpression(expr2); return(Expression.Lambda <Func <T, bool> > (Expression.AndAlso(expr1.Body, rightExpression.Body), expr1.Parameters)); }