提取Func<>来自Expression<>

时间:2013-12-04 06:33:45

标签: c# func linq-expressions

我想提取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 个答案:

答案 0 :(得分:9)

您可以使用Compile方法将Expresstion<TDelegate>转换为TDelegate


无法将委托转换为Expression<TDelegate>。当编译成代表时,有关构成表达式的内容的详细信息丢失了。

理论上,您可以通过执行以下操作来创建一个表达式,其身体不会执行任何操作,只需调用给定的委托:

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

但是这样的表达并不是真的有用。该表达式内部确实没有任何有意义的信息。因此,尽管技术上可行,但它从未真正实用。