protected abstract Expression VisitFromSql(FromSqlExpression fromSqlExpression);
protected override Expression VisitFromSql(FromSqlExpression fromSqlExpression) => fromSqlExpression;
protected override Expression VisitFromSql(FromSqlExpression fromSqlExpression) { Check.NotNull(fromSqlExpression, nameof(fromSqlExpression)); return(fromSqlExpression); }
protected abstract Expression VisitFromSql([NotNull] FromSqlExpression fromSqlExpression);
public override Expression Visit(Expression expression) { if (expression is FromSqlExpression fromSql) { if (!_visitedFromSqlExpressions.TryGetValue(fromSql, out var updatedFromSql)) { switch (fromSql.Arguments) { case ParameterExpression parameterExpression: var parameterValues = (object[])_parametersValues[parameterExpression.Name]; var subParameters = new List <IRelationalParameter>(parameterValues.Length); // ReSharper disable once ForCanBeConvertedToForeach for (var i = 0; i < parameterValues.Length; i++) { var parameterName = _parameterNameGenerator.GenerateNext(); if (parameterValues[i] is DbParameter dbParameter) { if (string.IsNullOrEmpty(dbParameter.ParameterName)) { dbParameter.ParameterName = parameterName; } else { parameterName = dbParameter.ParameterName; } subParameters.Add(new RawRelationalParameter(parameterName, dbParameter)); } else { subParameters.Add( new TypeMappedRelationalParameter( parameterName, parameterName, _sqlExpressionFactory.GetTypeMappingForValue(parameterValues[i]), parameterValues[i]?.GetType().IsNullableType())); } } updatedFromSql = new FromSqlExpression( fromSql.Sql, Expression.Constant( new CompositeRelationalParameter( parameterExpression.Name, subParameters)), fromSql.Alias); _visitedFromSqlExpressions[fromSql] = updatedFromSql; break; case ConstantExpression constantExpression: var existingValues = (object[])constantExpression.Value; var constantValues = new object[existingValues.Length]; for (var i = 0; i < existingValues.Length; i++) { var value = existingValues[i]; if (value is DbParameter dbParameter) { var parameterName = _parameterNameGenerator.GenerateNext(); if (string.IsNullOrEmpty(dbParameter.ParameterName)) { dbParameter.ParameterName = parameterName; } else { parameterName = dbParameter.ParameterName; } constantValues[i] = new RawRelationalParameter(parameterName, dbParameter); } else { constantValues[i] = _sqlExpressionFactory.Constant( value, _sqlExpressionFactory.GetTypeMappingForValue(value)); } } updatedFromSql = new FromSqlExpression( fromSql.Sql, Expression.Constant(constantValues, typeof(object[])), fromSql.Alias); _visitedFromSqlExpressions[fromSql] = updatedFromSql; break; } } return(updatedFromSql); } return(base.Visit(expression)); }
protected override Expression VisitFromSql(FromSqlExpression fromSqlExpression) { return(fromSqlExpression); }
protected override Expression VisitFromSql(FromSqlExpression x) { return(x); }