如何从 MethodCallExpression 访问 OrderBy 子句

How to access OrderBy clause from MethodCallExpression

我有一个处理 MethodCallExpression that has a OrderBy clause inside it. How can I get hold of the OrderBy 子句的自定义 LINQ 提供程序,以便我可以处理它?

我明白了,这是方法。

    public class QueryContext<T>
    {
        void Execute(MethodCallExpression dsQueryExpression)
        {
            var orderByFinder = new OrderByFinder();
            var orderByExpression = orderByFinder.GetOrderBy(dsQueryExpression);
            // .. Continue on processing the OrderBy expression
        }
    }

    internal class OrderByFinder : ExpressionVisitor
    {
        MethodCallExpression _orderByExpression;

        public MethodCallExpression GetOrderBy(Expression expression)
        {
            Visit(expression);
            return _orderByExpression;
        }

        protected override Expression VisitMethodCall(MethodCallExpression expression)
        {
            if (expression.Method.Name == "OrderBy") _orderByExpression = expression;

            Visit(expression.Arguments[0]);

            return expression;
        }
    }