Извлечение 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();
но такое выражение не очень полезно. Там действительно нет никакой значимой информации внутри этого выражения. Так что, хотя это технически возможно, но никогда не бывает практичным.