public async Task ChunkAsync <T>(
            Query query,
            int chunkSize,
            Func <IEnumerable <T>, int, bool> func,
            IDbTransaction transaction = null,
            int?timeout = null,
            CancellationToken cancellationToken = default
            )
        {
            PaginationResult <T> result = await PaginateAsync <T>(query, 1, chunkSize, transaction, cancellationToken : cancellationToken);

            if (!func(result.List, 1))
            {
                return;
            }

            while (result.HasNext)
            {
                result = result.Next(transaction);
                if (!func(result.List, result.Page))
                {
                    return;
                }
            }
        }
        public void Chunk <T>(Query query, int chunkSize, Action <IEnumerable <T>, int> action, IDbTransaction transaction = null, int?timeout = null)
        {
            PaginationResult <T> result = Paginate <T>(query, 1, chunkSize, transaction, timeout);

            action(result.List, 1);

            while (result.HasNext)
            {
                result = result.Next(transaction);
                action(result.List, result.Page);
            }
        }
        public async Task ChunkAsync <T>(
            Query query,
            int chunkSize,
            Action <IEnumerable <T>, int> action,
            IDbTransaction transaction = null,
            int?timeout = null,
            CancellationToken cancellationToken = default
            )
        {
            PaginationResult <T> result = await PaginateAsync <T>(query, 1, chunkSize, transaction, timeout, cancellationToken);

            action(result.List, 1);

            while (result.HasNext)
            {
                result = result.Next(transaction);
                action(result.List, result.Page);
            }
        }
        public void Chunk <T>(
            Query query,
            int chunkSize,
            Func <IEnumerable <T>, int, bool> func,
            IDbTransaction transaction = null,
            int?timeout = null)
        {
            PaginationResult <T> result = Paginate <T>(query, 1, chunkSize, transaction, timeout);

            if (!func(result.List, 1))
            {
                return;
            }

            while (result.HasNext)
            {
                result = result.Next(transaction);
                if (!func(result.List, result.Page))
                {
                    return;
                }
            }
        }