Linq 如何使用MethodCallExpression.Update

Linq 如何使用MethodCallExpression.Update,linq,expression-trees,Linq,Expression Trees,我尝试使用ExpressionVisitor修改调用方法的表达式,但失败。我有一个SearchService,它封装了搜索逻辑,并希望能够修改传递的搜索参数 应在其中修改和运行SearchFunc的类: public class SearchService { public Expression<Func<string, string, List<int>>> SearchFunc { get; set; } public void

我尝试使用ExpressionVisitor修改调用方法的表达式,但失败。我有一个SearchService,它封装了搜索逻辑,并希望能够修改传递的搜索参数

应在其中修改和运行SearchFunc的类:

  public class SearchService
  {
    public Expression<Func<string, string, List<int>>> SearchFunc { get; set; }

    public void Run()
    {
      SearchModifier modifier = new SearchModifier();
      Expression<Func<string, string, List<int>>> newFunc = (Expression<Func<string, string, List<int>>>)modifier.Modify(SearchFunc);
    }
  }
我找不到有关使用MethodCallExpression.Update方法的详细信息,因此我不确定我是否正确执行了此操作。如何更改方法中参数的值?
当然,可能有更好的方法来做到这一点,并且收到了非常感谢的任何建议…

您没有使用
更新方法的结果。您应该将其传递到
base.VisitMethodCall
而不是
节点

return base.VisitMethodCall(methodCallExpression);

编辑

对不起,我误解了这个问题。。。要更新的第一个参数不是要访问的表达式节点,而是调用方法的实例。因此,代码应该是:

node.Update(node.Object, newargs);

是的,我意识到了这一点,但是对Update方法的调用抛出了注释中显示的异常,因此我无法使用结果。
return base.VisitMethodCall(methodCallExpression);
node.Update(node.Object, newargs);