I will keep it really simple,
How do I get expression tree out of lambda??
or from query expression ?
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 lambda:
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 Func<...>
, 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.
I thought this really helped with problem Lambda Expressions It starts off with the basics but then does converting to expression tree, converting expression tree back to lambda and then creating an expression tree from scratch.