Exemple #1
0
        /// <summary>
        /// Executes command asynchronously and apply provided action to each record, mapped using provided mapping function.
        /// </summary>
        /// <typeparam name="T">Result record type.</typeparam>
        /// <param name="objectReader">Record mapping function from data reader.</param>
        /// <param name="action">Action, applied to each result record.</param>
        /// <param name="cancellationToken">Asynchronous operation cancellation token.</param>
        /// <returns>Returns task.</returns>
        public async Task QueryForEachAsync <T>(Func <IDataReader, T> objectReader, Action <T> action, CancellationToken cancellationToken)
        {
            await DataConnection.EnsureConnectionAsync(cancellationToken);

            DataConnection.InitCommand(CommandType, CommandText, Parameters, null);

            if (Parameters != null && Parameters.Length > 0)
            {
                SetParameters(DataConnection, Parameters);
            }

            using (var rd = await DataConnection.ExecuteReaderAsync(GetCommandBehavior(), cancellationToken))
                while (await rd.ReadAsync(cancellationToken))
                {
                    action(objectReader(rd));
                }
        }