public static async Task ChunkAsync <T>(
            this QueryFactory db,
            Query query,
            int chunkSize,
            Action <IEnumerable <T>,
                    int> action
            )
        {
            var result = await db.PaginateAsync <T>(query, 1, chunkSize);

            action(result.List, 1);

            while (result.HasNext)
            {
                result = result.Next();
                action(result.List, result.Page);
            }
        }
        public static async Task ChunkAsync <T>(
            this QueryFactory db,
            Query query,
            int chunkSize,
            Func <IEnumerable <T>, int, bool> func
            )
        {
            var result = await db.PaginateAsync <T>(query, 1, chunkSize);

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

            while (result.HasNext)
            {
                result = result.Next();
                if (!func(result.List, result.Page))
                {
                    return;
                }
            }
        }
        public static async Task <PaginationResult <T> > PaginateAsync <T>(this Query query, int page, int perPage = 25)
        {
            QueryFactory db = QueryHelper.CreateQueryFactory(query);

            return(await db.PaginateAsync <T>(query, page, perPage));
        }