private IReadOnlyList <CustomTypeAttributeValue> BuildAttributeCollection()
        {
            var attributeSource = GetType().GetFields(BindingFlags.Instance | BindingFlags.Public)
                                  .Select(f =>
                                          new
            {
                Field     = f,
                Attribute = f.GetCustomAttribute <OracleObjectMappingAttribute>()
            })
                                  .Where(fa => fa.Attribute != null)
                                  .Select((fa, i) =>
                                          new CustomTypeAttributeValue
            {
                ColumnHeader =
                    new ColumnHeader
                {
                    ColumnIndex = i,
                    Name        = fa.Attribute.AttributeName
                },
                Value = CustomTypeValueConverter.ConvertItem(fa.Field.GetValue(this), OracleLargeTextValue.DefaultPreviewLength)
            })
                                  .ToList()
                                  .AsReadOnly();

            return(_attributes = attributeSource);
        }
        private string BuildPreview()
        {
            if (IsNull)
            {
                return(String.Empty);
            }

            var items = Array.Take(PreviewMaxItemCount).Select(i => ToPrintable(CustomTypeValueConverter.ConvertItem(i, LargeValuePreviewLength)));

            if (!String.IsNullOrEmpty(_enclosingCharacter))
            {
                items = items.Select(i => String.Format("{0}{1}{0}", _enclosingCharacter, i));
            }

            return($"{DataTypeName}({String.Join(", ", items)}{(Array.Length > PreviewMaxItemCount ? $", {CellValueConverter.Ellipsis} ({Array.Length} items)" : String.Empty)})");
        }