2009-08-07 73 views
0

我想要一个在运行时动态编译的Linq表达式有条件的Linq表达式树

我有一个值,如果比值大于例如5000和另一个值> 70,那么它应该返回一个常量X 其他 值大于说5000和另一个值< 70它返回y 如何创建一个表达式树 一个> 5000 & b < 70天,然后 其他 a> 5000 & b> 70然后e

回答

3

您可以对三元运算符(?:)使用lambda表达式。

var d = 1; 
var e = 2; 
var f = 3; 

Expression<Func<int,int,int>> expression = 
    (a, b) => (a > 5000 && b < 70) ? d : 
       (a > 5000 && b > 70) ? e : 
       f; // If b == 70 

var func = expression.Compile(); 
var val = func(5432, 1); 
+0

我们是否可以进一步将a> 5000 && b <70转换成更多的表达式?如果是这样? – chugh97 2009-08-07 14:08:17

+0

你是什么意思?整个lambda将在编译时转换为表达式树 - 在Reflector中打开以查看它产生的内容。 – dahlbyk 2009-08-07 15:35:53