Конрад отвечает точно. Вам нужно присвоить лямбда-выражение Expression<Func<...>>
, чтобы компилятор генерировал дерево выражений. Если вы получаете лямбду в виде Func<...>
, Action<...>
или другого типа делегата, все, что у вас есть, это набор инструкций IL.
Если вам действительно нужно иметь возможность преобразовать лямбда-компилятор в обратно в дерево выражений, вам придется декомпилировать его (например, делать то, что делает инструмент рефлектора Лутца Редера). Я бы посоветовал взглянуть на библиотеку Cecil , которая обеспечивает расширенную поддержку манипуляций с IL и может сэкономить вам довольно много времени.