using Microsoft.EntityFrameworkCore; using NDB.Core.Abstractions.Paging; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace NDB.Data.EntityFramework.Extensions { public static class PagedResultExtensions { public static async Task> ToPagedResult(this IQueryable query, PageRequest pageRequest, CancellationToken cancellationToken = default) { var page = pageRequest.Page; var pageSize = pageRequest.PageSize; var totalCount = await query.CountAsync(cancellationToken); var values = await query.Skip(pageSize * (page - 1)).Take(pageSize).ToArrayAsync(cancellationToken); var totalPages = totalCount / pageSize + (totalCount % pageSize > 0 ? 1 : 0); var result = new PagedResult(page, pageSize, totalCount, totalPages, values); return result; } } }