Как удалить выражение OrderBy из ExpressionTree с помощью ExpressionVisitor?

Статус Orderby не поддерживается поставщиком linq для хранилища таблиц Azure. У меня есть выражение вроде

.Where(t => (t.RowKey.CompareTo("U_") > 0)).OrderBy(user => user.UserName)

я пытаюсь удалить .OrderBy(user => user.UserName) из дерева выражений

Я также хотел бы, чтобы посетитель удалил статус orderby из следующего выражения

.Where(t => (t.RowKey.CompareTo("U_") > 0)).OrderBy(user => user.UserName).Take(10)

станет

.Where(t => (t.RowKey.CompareTo("U_") > 0)).Take(10)

person Madu Alikor    schedule 07.12.2014    source источник


Ответы (1)


Вот реализация посетителя.

class OrderByRemovalVisitor : ExpressionVisitor
{

    protected override Expression VisitMethodCall(MethodCallExpression node)
    {

        if (node.Method.Name == "OrderBy" && node.Method.DeclaringType == typeof(Queryable))
            return node.Arguments[0];
        else
            return base.VisitMethodCall(node);
    }
}
person Shlomo    schedule 08.12.2014