/// <summary> /// 简化节点,然后对简化的表达式调用访问者委托。该方法在节点不可简化时引发异常。 /// </summary> /// <returns> /// 要访问的表达式,或应在树中替换此表达式的表达式。 /// </returns> /// <param name="visitor"><see cref="T:System.Func`2"/> 的一个实例。</param> protected override Expression VisitChildren(ExpressionVisitor visitor) { var newArguments = visitor.VisitAndConvert(_arguments, "VisitChildren"); return newArguments != _arguments ? new SqlFunctionExpression(FunctionName, newArguments, Type) : this; }
protected override Expression VisitChildren(ExpressionVisitor visitor) { var arguments = visitor.VisitAndConvert(new ReadOnlyCollection<Expression>(_arguments), "VisitChildren"); return arguments != Arguments ? new SqlFunctionExpression(FunctionName, arguments, Type) : this; }
protected override Expression VisitChildren(ExpressionVisitor visitor) { var newObject = visitor.Visit(MethodCall.Object); var newArguments = visitor.VisitAndConvert(MethodCall.Arguments, "VisitChildren"); if (newObject != MethodCall.Object || newArguments != MethodCall.Arguments) { return new MethodCallEvaluationPreventingExpression( Call(newObject, MethodCall.Method, newArguments)); } return this; }
public static ParameterExpression[] VisitParameters(ExpressionVisitor visitor, IParameterProvider nodes, string callerName) { ParameterExpression[] newNodes = null; for (int i = 0, n = nodes.ParameterCount; i < n; i++) { ParameterExpression curNode = nodes.GetParameter(i); ParameterExpression node = visitor.VisitAndConvert(curNode, callerName); if (newNodes != null) { newNodes[i] = node; } else if (!object.ReferenceEquals(node, curNode)) { newNodes = new ParameterExpression[n]; for (int j = 0; j < i; j++) { newNodes[j] = nodes.GetParameter(j); } newNodes[i] = node; } } return newNodes; }