public static LambdaExpression ReplaceParameter(Type acceptsType, LambdaExpression expression,
                                                        ParameterExpression newParam)
        {
            var before = expression.Parameters.FirstOrDefault(x => x.Type == acceptsType) ?? expression.Parameters.FirstOrDefault(x => x.Type.CanBeCastTo(acceptsType));

            if (before == null)
            {
                return(expression);
            }

            var rewriter = new ParameterRewriter(before, newParam);

            return(rewriter.VisitAndConvert(expression, "Activator"));
        }
 public static LambdaExpression ReplaceParameter(this LambdaExpression expression, Type acceptsType,
                                                 ParameterExpression newParam)
 {
     return(ParameterRewriter.ReplaceParameter(acceptsType, expression, newParam));
 }