File: Util\OrderingMethodFinder.cs
Project: ndp\fx\src\xsp\system\Web\System.Web.csproj (System.Web)
using System.Linq.Expressions;
 
namespace System.Web.Util {
    internal sealed class OrderingMethodFinder : ExpressionVisitor {
 
        private bool isTopLevelMethodCall = true;
 
        private bool OrderingMethodFound {
            get;
            set;
        }
 
        protected override Expression VisitMethodCall(MethodCallExpression node) {
            if (isTopLevelMethodCall && QueryableUtility.IsOrderingMethod(node)) {
                OrderingMethodFound = true;
            }
 
            isTopLevelMethodCall = false;
            Expression result = base.VisitMethodCall(node);
            isTopLevelMethodCall = true;
            return result;
        }
 
        internal static bool OrderMethodExists(Expression expression) {
            OrderingMethodFinder obj = new OrderingMethodFinder();
            obj.OrderingMethodFound = false;
            obj.Visit(expression);
            return obj.OrderingMethodFound;
        }
    }
}