我想提取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>>>
?
答案 0 :(得分:9)
您可以使用Compile
方法将Expresstion<TDelegate>
转换为TDelegate
。
无法将委托转换为Expression<TDelegate>
。当编译成代表时,有关构成表达式的内容的详细信息丢失了。
理论上,您可以通过执行以下操作来创建一个表达式,其身体不会执行任何操作,只需调用给定的委托:
Func<int> function = () => 42;
Expression<Func<int>> expression = () => function();
但是这样的表达并不是真的有用。该表达式内部确实没有任何有意义的信息。因此,尽管技术上可行,但它从未真正实用。