using System.Linq.Expressions;
public static void Main()
Expression<Func<string, string>> spencyString =
s => s + " belongs to Spencer";
var toUpperVisitor = new ToUpperVisitor();
var expressed = toUpperVisitor.VisitAndConvert(spencyString, null);
var result = expressed.Compile().DynamicInvoke("the cheese");
Console.WriteLine(result);
public class ToUpperVisitor : ExpressionVisitor
public override Expression Visit(Expression node)
if (node.NodeType == ExpressionType.Parameter)
if (node.Type == typeof(string))
var toUpper = typeof(string).GetMethod("ToUpper", Type.EmptyTypes);
var methodCallExpression = Expression.Call(
return methodCallExpression;