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