Beispiel #1
0
        internal static async Task <Tuple <IEnumerable <T>, IEnumerable <U>, IEnumerable <V>, IEnumerable <W>, IEnumerable <X> > > ToMultipleTypesAsync <T, U, V, W, X>(DbDataReader dr, bool forAnonymousTypes = false)
        {
            // Dataset #0 for type T
            var dataset0 = await ToPrimitiveOrTypeOrDynamicAsync <T>(dr);

            var hasNextResult0 = await dr.NextResultAsync();

            // Dataset #1 for type U
            var dataset1 = hasNextResult0 ? await ToPrimitiveOrTypeOrDynamicAsync <U>(dr) : null;

            var hasNextResult1 = hasNextResult0 ? await dr.NextResultAsync() : false;

            // Dataset #2 for type V
            var dataset2 = hasNextResult1 ? await ToPrimitiveOrTypeOrDynamicAsync <V>(dr) : null;

            var hasNextResult2 = hasNextResult1 ? await dr.NextResultAsync() : false;

            // Dataset #3 for type W
            var dataset3 = hasNextResult2 ? await ToPrimitiveOrTypeOrDynamicAsync <W>(dr) : null;

            var hasNextResult3 = hasNextResult2 ? await dr.NextResultAsync() : false;

            // Dataset #4 for type X
            var dataset4 = hasNextResult3 ? await ToPrimitiveOrTypeOrDynamicAsync <X>(dr) : null;

            var hasNextResult4 = hasNextResult3 ? await dr.NextResultAsync() : false;

            // Return
            return(new Tuple <IEnumerable <T>, IEnumerable <U>, IEnumerable <V>, IEnumerable <W>, IEnumerable <X> >
                   (
                       dataset0,
                       dataset1,
                       dataset2,
                       dataset3,
                       dataset4
                   ));

            // Depending of type of T, gets the Primitive, Dynamic or Typed data.
            async Task <IEnumerable <MyType> > ToPrimitiveOrTypeOrDynamicAsync <MyType>(DbDataReader datareader)
            {
                // Primitive type: Executable<string>()
                if (TypeExtension.IsPrimitive(typeof(MyType)))
                {
                    return(await DataReaderConvertor.ToPrimitivesAsync <MyType>(datareader));
                }

                // Dynamic type: Executable<dynamic>()
                else if (DynamicConvertor.IsDynamic(typeof(MyType)))
                {
                    return(await DataReaderConvertor.ToDynamicAsync <MyType>(datareader));
                }

                // Anonymous type: Executable(new { Name = "" })
                else if (forAnonymousTypes == true)
                {
                    return(await DataReaderConvertor.ToAnonymousAsync <MyType>(datareader));
                }

                // Object type: Executable<Employee>()
                else
                {
                    return((await DataReaderConvertor.ToTypeAsync <MyType>(datareader)).Rows);
                }
            }
        }