protected abstract Expression VisitFromSql(FromSqlExpression fromSqlExpression);
Esempio n. 2
0
 protected override Expression VisitFromSql(FromSqlExpression fromSqlExpression)
 => fromSqlExpression;
Esempio n. 3
0
        protected override Expression VisitFromSql(FromSqlExpression fromSqlExpression)
        {
            Check.NotNull(fromSqlExpression, nameof(fromSqlExpression));

            return(fromSqlExpression);
        }
Esempio n. 4
0
 protected abstract Expression VisitFromSql([NotNull] FromSqlExpression fromSqlExpression);
Esempio n. 5
0
            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));
            }
Esempio n. 6
0
 protected override Expression VisitFromSql(FromSqlExpression fromSqlExpression)
 {
     return(fromSqlExpression);
 }
 protected override Expression VisitFromSql(FromSqlExpression x)
 {
     return(x);
 }