从 Expression<> 中提取 Func<>

11

我想从以下表达式中提取 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>>>


23
orderFunc = order.Compile() - Kirill Shlenskiy
@KirillShlenskiy:请将其写入新的帖子表单,并标记为答案。 - Mohammad Dayyan
1
抱歉 - 我没有足够的时间撰写完整答案,但仍然想要帮助。Servy已经提供了一个回答,涵盖了您的编辑以及原始问题,这比我本来要写的更好。 - Kirill Shlenskiy
1个回答

15
你可以使用Compile方法将任何Expresstion<TDelegate>转换为TDelegate
无法将委托转换为Expression<TDelegate>。当将其编译为委托时,组成表达式的详细信息已经丢失。
理论上,你可以创建一个表达式,其主体仅调用给定的委托,例如:
Func<int> function = () => 42;
Expression<Func<int>> expression = () => function();

但这样的表达并不真正有用。这个表达式里面并没有任何有意义的信息。虽然从技术上讲可能是可行的,但实际上却从未实用过。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接