Ich werde es wirklich einfach halten,
Wie bekomme ich Ausdrucksbaum aus Lambda ??
oder aus Abfrageausdruck?
Sie müssen das Lambda einem anderen Typ zuordnen:
// Gives you a delegate:
Func<int, int> f = x => x * 2;
// Gives you an expression tree:
Expression<Func<int, int>> g = x => x * 2;
Das gleiche gilt für Methodenargumente. Func<>
Sie jedoch einen solchen Lambda-Ausdruck einem Func<>
-Typ zugewiesen haben, können Sie den Ausdrucksbaum nicht mehr zurückerhalten.
Konrads Antwort ist exakt. Sie müssen den Lambda-Ausdruck dem Expression<Func<...>>
zuweisen, damit der Compiler den Ausdrucksbaum erzeugt. Wenn Sie ein Lambda als Func<...>
, Action<...>
oder einen anderen Func<...>
, haben Sie nur eine Reihe von IL-Anweisungen.
Wenn Sie wirklich ein IL-kompiliertes Lambda in eine Ausdrucksbaumstruktur konvertieren müssen, müssen Sie es dekompilieren (z. B. tun, was Lutz Roeders Reflector-Tool tut). Ich würde vorschlagen, einen Blick auf die Cecil- Bibliothek zu werfen, die erweiterte Unterstützung für die Manipulation von ILs bietet und Ihnen eine Menge Zeit sparen könnte.