Я понял, вот как.
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;
}
}
Это даст вам один, помните, что может быть много! – MBoros
@MBoros Да, мой находит нижнее предложение OrderBy, которое подходит для моего использования, поскольку источник данных OData, к которому я обращаюсь, поддерживает только порядок на первом уровне запроса. –
@IngeHenriksen Кроме 'OrderBy', есть' OrderByDescending' плюс 'ThenBy' /' ThenByDescending' – xanatos