Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Extracting Func<> from Expression<>

I wanna extract the Func<> from the following Expression :

Expression<Func<IQueryable<Entity>, IOrderedQueryable<Entity>>> order = q => q.OrderByDescending(c=>c.FullName);

Func<IQueryable<Entity>, IOrderedQueryable<Entity>> orderFunc = ?

How can I do it?

Edit :

And how can we convert Func<IQueryable<Entity>, IOrderedQueryable<Entity>> to Expression<Func<IQueryable<Entity>, IOrderedQueryable<Entity>>> ?

like image 865
Mohammad Dayyan Avatar asked Dec 04 '13 06:12

Mohammad Dayyan


1 Answers

You can use the Compile method to turn any Expresstion<TDelegate> into a TDelegate.


There is no way to convert a delegate into an Expression<TDelegate>. The detailed information about what makes up the expression was lost when it was compiled into a delegate.

You could, in theory create an expression who's body does nothing but invoke the given delegate, by doing something like this:

Func<int> function = () => 42;
Expression<Func<int>> expression = () => function();

but such an expression isn't really useful. There really isn't any meaningful information inside of that expression. So while it's technically possible, it's never really practical.

like image 62
Servy Avatar answered Sep 29 '22 18:09

Servy