在表达式树/迭代表达式树中查找方法调用

时间:2013-04-16 00:11:19

标签: c# .net linq expression-trees

我需要在表达式树中找到对特定方法的所有调用,这可能非常复杂。目前我有简单的递归代码,它检查BinaryExpression,ConditionalExpression等,当然还有MethodCallExpression。它有效,但我想知道是否有更简单的方法?

我需要的是复杂表达式中所有MethodCallExpression的迭代器,所以我可以检查MethodCallExpression而不关心我树中的其他类型的表达式。是这样的内置例如在System.Linq.Expressions吗?

1 个答案:

答案 0 :(得分:3)

正如svick正确指出:使用ExpressionVisitor基类:

http://msdn.microsoft.com/en-us/library/system.linq.expressions.expressionvisitor.aspx

如果你想自己动手或看看ExpressionVisitor是如何工作的,在本文中,Matt Warren将通过访问每个节点向你展示如何重建表达式树。

http://blogs.msdn.com/b/mattwar/archive/2007/07/31/linq-building-an-iqueryable-provider-part-ii.aspx

您无需重建它,只需搜索即可。您可以修改Matt的代码,使其不返回新的重建表达式,只是递归搜索每个子节点。