我有一个表达式访问者将表达式转换为 url 格式。但它只转换最后调用的表达式。例如,如果我这样调用我的集合:
NetworkAccountStorage.Where<NetworkAccountModel>(x => x.ID + 1 > 0).Select(x => x.Name).Distinct()
Distinct 将是唯一访问的表达式。如何解决?
protected override Expression VisitMethodCall(MethodCallExpression m)
{
if (m.Method.DeclaringType == typeof(Queryable) && m.Method.Name == "Where")
{
sb.Append("$filter=");
//this.Visit(m.Arguments[0]);
//sb.Append(") AS T WHERE ");
LambdaExpression lambda = (LambdaExpression)StripQuotes(m.Arguments[1]);
this.Visit(lambda.Body);
return m;
}
else if (m.Method.DeclaringType == typeof(Queryable) && m.Method.Name == "Select")
{
sb.Append("$select=");
LambdaExpression lambda = (LambdaExpression)StripQuotes(m.Arguments[1]);
this.Visit(lambda.Body);
return m;
}
throw new NotSupportedException(string.Format("The method '{0}' is not supported", m.Method.Name));
}
最佳答案
您需要通过调用您覆盖的基本方法来递归:
base.VisitMethodCall(...);
关于c# - VisitMethodCall 不访问每个部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14076312/