如何使用ExpressionVisitor从ExpressionTree中删除OrderBy表达式?

时间:2014-12-07 02:02:13

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

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)

1 个答案:

答案 0 :(得分:0)

这是一个访客实施。

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);
    }
}