Как удалить выражение 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)
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);
}
}