2017-06-04 50 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 –