我想到了这个,它似乎起了作用:
protected class ParameterReplacer : ExpressionVisitor
{
private ParameterExpression parameterExpression;
private string newValue;
public ParameterReplacer(ParameterExpression parameterExpression, string newValue)
{
this.parameterExpression = parameterExpression;
this.newValue = newValue;
}
public override Expression Visit(Expression node)
{
if (node == parameterExpression)
return Expression.Constant(this.newValue);
return base.Visit(node);
}
}
在我的代码中,我是这样使用的:
var replacer = new ParameterReplacer(FilterExp.Parameters[1], Filter);
var newBody = replacer.Visit(FilterExp.Body);
var exp = Expression.Lambda<Func<T, bool>>(newBody, FilterExp.Parameters[0]);
return SourceData.Where(exp);