我有這個表達
public Expression<Func<TEntity, int, bool>> FilterExpr
現在我想消除/插入 int 值的值
喜歡
int i = 12;
//Pseudo Code which sets the value of the second Parameter
FilterExpr.Arg2 = i;
結果應該是
Expression<Func<TEntity, bool>>
沒有 int 引數
謝謝
uj5u.com熱心網友回復:
您可以通過替換正文中的引數并使用一個引數創建新的 lambda 運算式來創建新運算式。例如使用這個替換器(或者ReplacingExpressionVisitor如果你使用的是 EF Core 3.0 ):
public static class ExpressionExt
{
public static Expression ReplaceParameter(this Expression expression, ParameterExpression source, Expression target)
{
return new ParameterReplacingVisitor { Source = source, Target = target }.Visit(expression);
}
class ParameterReplacingVisitor : ExpressionVisitor
{
public ParameterExpression Source;
public Expression Target;
protected override Expression VisitParameter(ParameterExpression node)
{
return node == Source ? Target : base.VisitParameter(node);
}
}
}
并修改運算式:
var withReplaced = FilterExpr.Body.ReplaceParameter(
FilterExpr.Parameters[1], // replace second parameter
Expression.Constant(42)); // with some constant
// build new expression with only one parameter by reusing first parameter of original one
var result = Expression.Lambda<Func<MyClass, bool>>(withReplaced, FilterExpr.Parameters[0]);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/483191.html
上一篇:禁止方法的所有警告
下一篇:在C#中查找樹項
