internal static Task <Dictionary <K, V> > DictionaryAsync <K, V>(this IDataReader reader, IOrmLiteDialectProvider dialectProvider, CancellationToken token)
        {
            var map = new Dictionary <K, V>();

            return(dialectProvider.ReaderEach(reader, () =>
            {
                var key = (K)dialectProvider.ConvertDbValue(reader.GetValue(0), typeof(K));
                var value = (V)dialectProvider.ConvertDbValue(reader.GetValue(1), typeof(V));
                map.Add(key, value);
            }, map, token));
        }
        internal static Dictionary <K, V> Dictionary <K, V>(this IDataReader reader, IOrmLiteDialectProvider dialectProvider)
        {
            var map = new Dictionary <K, V>();

            while (reader.Read())
            {
                var key   = (K)dialectProvider.ConvertDbValue(reader.GetValue(0), typeof(K));
                var value = (V)dialectProvider.ConvertDbValue(reader.GetValue(1), typeof(V));

                map.Add(key, value);
            }

            return(map);
        }
        internal static T ToScalar <T>(IOrmLiteDialectProvider dialectProvider, object oValue)
        {
            if (oValue == DBNull.Value)
            {
                return(default(T));
            }

            var typeCode = typeof(T).GetUnderlyingTypeCode();

            switch (typeCode)
            {
            case TypeCode.DateTime:
                return((T)(object)DateTime.Parse(oValue.ToString(), CultureInfo.CurrentCulture));

            case TypeCode.Decimal:
                return((T)(object)Decimal.Parse(oValue.ToString(), CultureInfo.CurrentCulture));

            case TypeCode.Single:
                return((T)(object)System.Single.Parse(oValue.ToString(), CultureInfo.CurrentCulture));

            case TypeCode.Double:
                return((T)(object)Double.Parse(oValue.ToString(), CultureInfo.CurrentCulture));
            }

            object o = dialectProvider.ConvertDbValue(oValue, typeof(T));

            return(o == null ? default(T) : (T)o);
        }
        internal static Task <Dictionary <K, List <V> > > LookupAsync <K, V>(this IDataReader reader, IOrmLiteDialectProvider dialectProvider, CancellationToken token)
        {
            var lookup = new Dictionary <K, List <V> >();

            return(dialectProvider.ReaderEach(reader, () =>
            {
                var key = (K)dialectProvider.ConvertDbValue(reader.GetValue(0), typeof(K));
                var value = (V)dialectProvider.ConvertDbValue(reader.GetValue(1), typeof(V));

                List <V> values;
                if (!lookup.TryGetValue(key, out values))
                {
                    values = new List <V>();
                    lookup[key] = values;
                }
                values.Add(value);
            }, lookup, token));
        }
        internal static Dictionary <K, List <V> > Lookup <K, V>(this IDataReader reader, IOrmLiteDialectProvider dialectProvider)
        {
            var lookup = new Dictionary <K, List <V> >();

            while (reader.Read())
            {
                var key   = (K)dialectProvider.ConvertDbValue(reader.GetValue(0), typeof(K));
                var value = (V)dialectProvider.ConvertDbValue(reader.GetValue(1), typeof(V));

                List <V> values;
                if (!lookup.TryGetValue(key, out values))
                {
                    values      = new List <V>();
                    lookup[key] = values;
                }
                values.Add(value);
            }

            return(lookup);
        }
 internal static Task <HashSet <T> > ColumnDistinctAsync <T>(this IDataReader reader, IOrmLiteDialectProvider dialectProvider, CancellationToken token)
 {
     return(dialectProvider.ReaderEach(reader, () =>
     {
         var value = dialectProvider.ConvertDbValue(reader.GetValue(0), typeof(T));
         return value == DBNull.Value ? default(T) : value;
     }, token)
            .Then(x =>
     {
         var columValues = new HashSet <T>();
         x.Each(o => columValues.Add((T)o));
         return columValues;
     }));
 }
        internal static HashSet <T> ColumnDistinct <T>(this IDataReader reader, IOrmLiteDialectProvider dialectProvider)
        {
            var columValues = new HashSet <T>();

            while (reader.Read())
            {
                var value = dialectProvider.ConvertDbValue(reader.GetValue(0), typeof(T));
                if (value == DBNull.Value)
                {
                    value = default(T);
                }

                columValues.Add((T)value);
            }
            return(columValues);
        }