【问题标题】:How do you remove OrderBy expression from an ExpressionTree using a ExpressionVisitor?如何使用 ExpressionVisitor 从 ExpressionTree 中删除 OrderBy 表达式?
【发布时间】:2014-12-07 02:02:12
【问题描述】:

Azure 表存储 linq 提供程序不支持 Orderby 语句我有一个类似

的表达式
.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)

【问题讨论】:

    标签: linq expression-trees expressionvisitor custom-linq-providers


    【解决方案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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 2011-08-02
      • 1970-01-01
      相关资源
      最近更新 更多