26 lines
954 B
C#
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;
|
|
}
|
|
}
|
|
}
|