32 lines
959 B
C#
32 lines
959 B
C#
|
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;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|