/// <summary>
        /// Executes a query with the specified command text and <typeparamref name="dbParameterSetter"/>, mapping a set of result to a list of object via a <typeparamref name="setMapperFunc"/>.
        /// <para>
        /// Call <see cref="IDataReader.Read"/> to get next result.
        /// </para>
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="adoTemplate">The ado template</param>
        /// <param name="cmdType">Text or Stored Procedure</param>
        /// <param name="cmdText">The command text (Select)</param>
        /// <param name="dbParameterSetter">The parameter setter to bind to the query</param>
        /// <param name="setMapperFunc">CallBack function that maps a set of result to list of objects</param>
        /// <returns></returns>
        public static IList <T> QueryForList <T>(this AdoTemplate adoTemplate, CommandType cmdType, string cmdText, IDbParameterSetter dbParameterSetter, Func <IDataReader, IList <T> > setMapperFunc)
        {
            var rowMapper = new IResultSetImplementor <T>(setMapperFunc);

            return(adoTemplate.QueryForList(cmdType, cmdText, dbParameterSetter, rowMapper));
        }
        /// <summary>
        /// Executes a query with the specified command text,mapping a set of result to a list of object via a <typeparamref name="setMapperFunc"/>.
        /// <para>
        /// Call <see cref="IDataReader.Read"/> to get next result.
        /// </para>
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="adoTemplate">The ado template</param>
        /// <param name="cmdText">The command text (Select)</param>
        /// <param name="setMapperFunc">CallBack function that maps a set of result to list of objects</param>
        /// <returns></returns>
        public static IList <T> QueryForList <T>(this AdoTemplate adoTemplate, string cmdText, Func <IDataReader, IList <T> > setMapperFunc)
        {
            var rowMapper = new IResultSetImplementor <T>(setMapperFunc);

            return(adoTemplate.QueryForList(CommandType.Text, cmdText, null, rowMapper));
        }