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; } } }