Извлечение Func<> из выражения <>

Я хочу извлечь Func<> из следующего выражения:

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

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

Как мне это сделать?

Редактировать:

И как мы можем конвертировать Func<IQueryable<Entity>, IOrderedQueryable<Entity>> в Expression<Func<IQueryable<Entity>, IOrderedQueryable<Entity>>>?

1 ответ

Решение

Вы можете использовать Compile способ превратить любой Expresstion<TDelegate> в TDelegate,


Нет способа преобразовать делегата в Expression<TDelegate>, Подробная информация о том, из чего состоит выражение, была потеряна при его компиляции в делегат.

Теоретически вы могли бы создать выражение, тело которого ничего не делает, кроме вызова данного делегата, выполнив что-то вроде этого:

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

но такое выражение не очень полезно. Там действительно нет никакой значимой информации внутри этого выражения. Так что, хотя это технически возможно, но никогда не бывает практичным.

Другие вопросы по тегам