2009-08-07 14 views
0

Ich möchte einen Linq-Ausdruck, der zur LaufzeitBedingter Linq-Ausdrucksbaum

dynamisch kompiliert Ich habe einen Wert und wenn als Wert größer als sagen für z. 5000 und ein anderer Wert> 70, dann sollte es eine Konstante x sonst Wert größer als 5000 sagen und einen anderen Wert zurückgeben < 70 kehrt y Wie erstelle ich einen Ausdruck Baum a> 5000 & b < 70 dann sonst d a> 5000 & b> 70 dann e

Antwort

3

Sie können einen Lambda-Ausdruck mit dem ternären Operator (? :) verwenden.

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

Können wir weitere der a> 5000 && b brechen <70 in weitere Ausdrücke? Wenn das so ist, wie?? – chugh97

+0

Wie meinst du das? Das gesamte Lambda wird zur Kompilierungszeit in einen Ausdrucksbaum umgewandelt - öffnen Sie es in Reflector, um genau zu sehen, was es produziert hat. – dahlbyk