2009-08-07 70 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