private static async Task <PagedResults <TEntity> > PaginateAsync <TEntity, TQuery>(this IMongoQueryable <TEntity> collection, int page, int resultsPerPage, string orderbyKey, SortOrder sortOrder) { page = page <= 0 ? 1 : page; resultsPerPage = resultsPerPage <= 0 ? 10 : resultsPerPage; var isEmpty = await collection.AnyAsync() == false; if (isEmpty) { return(PagedResults <TEntity> .Empty); } var totalResults = await collection.CountAsync(); var totalPages = (int)(totalResults / resultsPerPage) + 1; var skip = (page - 1) * resultsPerPage; var data = await collection.OrderData(orderbyKey, sortOrder).Skip(skip).Take(resultsPerPage).ToListAsync(); return(PagedResults <TEntity> .Create(data, page, resultsPerPage, totalPages, totalResults)); }