2017-06-04 28 views
1

考虑:替换参数为表达

var paramA = Expression.Parameter(typeof(string), "a"); 

和:

Expression<Func<string, bool>> expr = b => b == "Something"; 

反正是有由paramA更换b到表达expr

+1

是,使用'ExpressionVisitor'。有很多关于SO的参数替换器的例子,这里是我的https://stackoverflow.com/search?q=user%3A5202563+ParameterReplacer –

+0

你需要一个替代品,或者你只需​​要一个'Expression >与'expr'有相同的作用,其中'a'是一个参数吗? – dasblinkenlight

+0

嗨@dasblinkenlight,替换或新的表达式可以工作。 –

回答

2

你可以走的expr表达式树,并使用这个问答& A中描述的方法与paramA取代的b所有出现:"Combine two lambda expressions with inner expression"

但是,如果你只需要使用paramA作为它的参数lambda表达式,它是更容易使一个包装expr,而不是一个拉姆达:

var res = (Expression<Func<string,bool>>)Expression.Lambda(
    Expression.Invoke(expr, paramA) 
, paramA 
); 
+0

Thx @dasblinkenlight! –

+3

我总是忘记这种方法(主要是因为它不支持在我使用的EF中:) +1 –