1
目的を達成するための簡単な方法があるかどうかわかりません。 私は式をプログラムで構築し、反対側には手動で入力した式があります。それらが全く同じであると仮定すると、私はParameterExpressionに変更する必要があります。ここ は、私は、デバッガビュー画像ラムダ式を別のパラメータの別のものに変換/複製する
が、これはなんとかです、あなただと思いますまた、貼り付けるサンプルコード
//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
のですか? 私はこれを起草し始めたが、
//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)
}
は、私は、プロセスを簡素化するために何かをしないのです決して終わることのない努力のように見えますか?
私は、私の場合は異なる状況を説明するためにあなたの答えを編集していると私は、変更されたコードを含めました。 –
実際にパラメータをパラメータに置き換えているかどうかはわからないので、特定のソリューションを表示できませんでした。リンクがうれしく思いました。 –