I will keep it really simple,
How do I get expression tree out of lambda??
or from query expression ?
You must assign the lambda to a different type:
// Gives you a delegate: Func<int, int> f = x => x * 2; // Gives you an expression tree: Expression<Func<int, int>> g = x => x * 2;
The same goes for method arguments. However, once you've assigned such a lambda expression to a
Func<> type, you can't get the expression tree back.
Konrad's reply is exact. You need to assign the lambda expression to
Expression<Func<...>> in order for the compiler to generate the expression tree. If you get a lambda as a
Action<...> or other delegate type, all you have is a bunch of IL instructions.
If you really need to be able to convert an IL-compiled lambda back into an expression tree, you'd have to decompile it (e.g. do what Lutz Roeder's Reflector tool does). I'd suggest having a look at the Cecil library, which provides advanced IL manipulation support and could save you quite some time.