I don't know if there is an easy way to achieve my goal. On one side I have an Expression built up programmatically and on the other side the same expression inputted manually. Assuming their exactly the same, I need to change to ParameterExpression in the manual one to that is equal to the other. Here is a sample code
//I have this expression (for example)
Expression<Func<Bar,bool>> old_expr = x => x.Name == x.ColBar;
//I want to change parameter from x to y
//I already have the y parameter in the code, let's say it is the following
ParameterExpression py = Expression.Parameter(typeof(Bar), "y");
//this is what I have tried, but it is *not* complete neither generic
Expression expr_to_do;
if (old_expr.Body.NodeType.Equals(ExpressionType.Convert)) {
UnaryExpression convEx = old_expr.Body as UnaryExpression;
expr_to_do = convEx.Operand;
} else {
expr_to_do = old_expr.Body;
}
//TODO: convert the BinarayExpression eqEx, etc... etc...
var newLambda = Expression.Lambda(expr_to_do, new ParameterExpression[1]{py});
//Again, what I want to get is the following, where y *is* the parameter defined *above*
Expression<Func<Bar,bool>> new_expr = y => y.Name == y.ColBar;
//The code/method I'm looking for - if it does exist a method to do that - must be generic enough not specific to this single expression
I paste also a debugger view image
Do you think this is doable? I started to draft this, but it appears to be a never-ending effort
//TODO convert the BinarayExpression eqEx, etc... etc...
if (expr_to_do.NodeType.Equals(ExpressionType.Equal)) {
// have I to manage each Expr Type case??
var eqExpr = expr_to_do as BinaryExpression;
var left = eqExpr.Left as MemberExpression;
...
var new_left = Expression.Property(...,py)
}
Am I missing something to simplify the process?