internal virtual SqlExpression VisitIn(SqlIn sin) { sin.Expression = this.VisitExpression(sin.Expression); for (int i = 0, n = sin.Values.Count; i < n; i++) { sin.Values[i] = this.VisitExpression(sin.Values[i]); } return sin; }
internal override SqlExpression VisitIn(SqlIn sin) { SqlIn nin = new SqlIn(sin.ClrType, sin.SqlType, this.VisitExpression(sin.Expression), sin.Values, sin.SourceExpression); for(int i = 0, n = nin.Values.Count; i < n; i++) { nin.Values[i] = this.VisitExpression(nin.Values[i]); } return nin; }
internal override SqlExpression VisitIn(SqlIn sin) { this.VisitWithParens(sin.Expression, sin); _commandStringBuilder.Append(" IN ("); for(int i = 0, n = sin.Values.Count; i < n; i++) { if(i > 0) { _commandStringBuilder.Append(", "); } this.Visit(sin.Values[i]); } _commandStringBuilder.Append(")"); return sin; }
internal override SqlExpression VisitIn(SqlIn sin) { // Treat the IN as a series of binary comparison expressions (and coerce if necessary). // Check to see if any expressions need to change as a result of coercion, where we start // with "sin.Expression IN sin.Values" and coerced expressions are "test IN newValues". SqlExpression test = sin.Expression; bool requiresCoercion = false; var newValues = new Collections.Generic.List<SqlExpression>(sin.Values.Count); ProviderType valueType = null; for(int i = 0, n = sin.Values.Count; i < n; i++) { SqlExpression value = sin.Values[i]; this.CoerceBinaryArgs(ref test, ref value); if(value != sin.Values[i]) { // Build up 'widest' type by repeatedly applying PredictType valueType = null == valueType ? value.SqlType : this.typeProvider.PredictTypeForBinary(SqlNodeType.EQ, value.SqlType, valueType); requiresCoercion = true; } newValues.Add(value); } if(test != sin.Expression) { requiresCoercion = true; } if(requiresCoercion) { ProviderType providerType = this.typeProvider.PredictTypeForBinary(SqlNodeType.EQ, test.SqlType, valueType); sin = new SqlIn(sin.ClrType, providerType, test, newValues, sin.SourceExpression); } return sin; }