netmash/src/data/NDB.Data.EntityFramework/Extensions/PagedResultExtensions.cs

26 lines
954 B
C#

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<PagedResult<TEntity>> ToPagedResult<TEntity>(this IQueryable<TEntity> 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<TEntity>(page, pageSize, totalCount, totalPages, values);
return result;
}
}
}