You need to wrap addExpr in the call using expression parameters
Expression<Func<int,int,int>> addExpr = (x, y) => x + y; var p1 = Expression.Parameter(typeof(int), "p1"); var p2 = Expression.Parameter(typeof(int), "p2"); var invokeExpression=Expression.Invoke(addExpr,p1,p2); var lambda = Expression.Lambda<Func<int,int,int>>(invokeExpression,p1,p2); var del = lambda.Compile(); var result=del(2,3);
It is called how you enter p1 in x and p2 in y, otherwise you could just write above, like
var p1 = Expression.Parameter(typeof(int), "p1"); var p2 = Expression.Parameter(typeof(int), "p2"); var lambda=Expresion.Lambda<Func<int,int,int>>(Expression.Add(p1,p2),p1,p2); var del = lambda.Compile(); var result=del(2,3);
Otherwise, you need to capture the body of the expression in lambda and pass the parameters of the expression.
var lambda=Expresion.Lambda<Func<int,int,int>>(addExpr.Body,addExpr.Parameters);
source share