Esempio n. 1
0
        /// <summary>
        /// Creates substring of other <see cref="SqlString"/>.
        /// </summary>
        /// <param name="other"></param>
        /// <param name="sqlStartIndex"></param>
        /// <param name="length"></param>
        private SqlString(SqlString other, int sqlStartIndex, int length)
        {
            _parts          = other._parts;
            _sqlStartIndex  = sqlStartIndex;
            _length         = length;
            _firstPartIndex = other.GetPartIndexForSqlIndex(sqlStartIndex);
            _lastPartIndex  = other.GetPartIndexForSqlIndex(_sqlStartIndex + _length - 1);

            if (_firstPartIndex != _lastPartIndex || _parts[_firstPartIndex].IsParameter)
            {
                _parameters = new SortedList <int, Parameter>(other._parameters.Count);
                using (var otherParameterEnum = other._parameters.GetEnumerator())
                {
                    while (otherParameterEnum.MoveNext())
                    {
                        if (otherParameterEnum.Current.Key >= _sqlStartIndex)
                        {
                            break;
                        }
                    }

                    var sqlEndIndex = _sqlStartIndex + _length;
                    do
                    {
                        if (otherParameterEnum.Current.Key > sqlEndIndex)
                        {
                            break;
                        }
                        _parameters.Add(otherParameterEnum.Current.Key, otherParameterEnum.Current.Value);
                    } while (otherParameterEnum.MoveNext());
                }
            }
            else
            {
                _parameters = Empty._parameters;
            }
        }