예제 #1
0
        public static T ConvertToValueTuple <T>(this IDataReader reader, object[] values, IOrmLiteDialectProvider dialectProvider)
        {
            var row        = typeof(T).CreateInstance();
            var typeFields = TypeFields.Get(typeof(T));

            values = reader.PopulateValues(values, dialectProvider);

            for (var i = 0; i < reader.FieldCount; i++)
            {
                var itemName = $"Item{(i + 1)}";
                var field    = typeFields.GetAccessor(itemName);
                if (field == null)
                {
                    break;
                }

                var dbValue = values != null
                    ? values[i]
                    : reader.GetValue(i);

                if (dbValue == null)
                {
                    continue;
                }

                var fieldType = field.FieldInfo.FieldType;
                if (dbValue.GetType() == fieldType)
                {
                    field.PublicSetterRef(ref row, dbValue);
                }
                else
                {
                    var converter  = dialectProvider.GetConverter(fieldType);
                    var fieldValue = converter.FromDbValue(fieldType, dbValue);
                    field.PublicSetterRef(ref row, fieldValue);
                }
            }

            return((T)row);
        }
        internal static T ToScalar <T>(IOrmLiteDialectProvider dialectProvider, IDataReader reader, int columnIndex = 0)
        {
            var nullableType = Nullable.GetUnderlyingType(typeof(T));

            if (nullableType != null)
            {
                object oValue = reader.GetValue(columnIndex);
                if (oValue == DBNull.Value)
                {
                    return(default(T));
                }
            }

            var underlyingType = nullableType ?? typeof(T);

            if (underlyingType == typeof(object))
            {
                return((T)reader.GetValue(0));
            }

            var converter = dialectProvider.GetConverter(underlyingType);

            if (converter != null)
            {
                object oValue = converter.GetValue(reader, columnIndex);
                if (oValue == null || oValue == DBNull.Value)
                {
                    return(default(T));
                }

                var convertedValue = converter.FromDbValue(underlyingType, oValue);
                return(convertedValue == null ? default(T) : (T)convertedValue);
            }

            return((T)reader.GetValue(0));
        }
 public static DateTimeConverter GetDateTimeConverter(this IOrmLiteDialectProvider dialect)
 {
     return((DateTimeConverter)dialect.GetConverter(typeof(DateTime)));
 }
 public static DecimalConverter GetDecimalConverter(this IOrmLiteDialectProvider dialect)
 {
     return((DecimalConverter)dialect.GetConverter(typeof(decimal)));
 }
 public static StringConverter GetStringConverter(this IOrmLiteDialectProvider dialect)
 {
     return((StringConverter)dialect.GetConverter(typeof(string)));
 }
 public static bool HasConverter(this IOrmLiteDialectProvider dialect, Type type)
 {
     return(dialect.GetConverter(type) != null);
 }
 public static IOrmLiteConverter GetConverter <T>(this IOrmLiteDialectProvider dialect)
 {
     return(dialect.GetConverter(typeof(T)));
 }