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))); }