Argon.Extensions.Pagination.EntityFrameworkCore 8.5.0
Argon.Extensions.Pagination.EntityFrameworkCore
Asynchronous pagination extensions for Entity Framework Core.
📦 Installation
dotnet add package Argon.Extensions.Pagination.EntityFrameworkCore
⚠️ This package also requires
Argon.Extensions.Paginationwhich will be installed automatically.
✨ Features
PaginateAsync()extension for asynchronous queriesCancellationTokensupport- Optimization for database queries
- Uses Entity Framework Core's
ToListAsync()andCountAsync()
🚀 Usage
Asynchronous pagination
using Argon.Extensions.Pagination.EntityFrameworkCore;
var query = dbContext.Users.Where(u => u.IsActive);
// Asynchronous pagination
var page = await query.PaginateAsync(index: 0, size: 10);
foreach (var user in page.Items)
{
Console.WriteLine(user.Name);
}
With CancellationToken
public async Task<Page<User>> GetUsersAsync(
int pageIndex,
int pageSize,
CancellationToken cancellationToken)
{
var query = _context.Users.Where(u => u.IsActive);
return await query.PaginateAsync(
index: pageIndex,
size: pageSize,
cancellationToken: cancellationToken);
}
With PageQuery
var pageQuery = new PageQuery
{
Index = 0,
Limit = 10
};
var page = await query.PaginateAsync(pageQuery, cancellationToken);
Example with API Controller
[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
private readonly AppDbContext _context;
public UsersController(AppDbContext context)
{
_context = context;
}
[HttpGet]
public async Task<ActionResult<Page<User>>> GetUsersAsync(
[FromQuery] PageQuery pageQuery,
CancellationToken cancellationToken)
{
var users = await _context.Users
.Where(u => u.IsActive)
.OrderBy(u => u.Name)
.PaginateAsync(pageQuery, cancellationToken);
return Ok(users);
}
}
📝 API Reference
QueryableAsyncExtension Extensions
Methods:
PaginateAsync<T>(this IQueryable<T> queryable, int index, int size, CancellationToken cancellationToken = default): Paginates a query asynchronouslyPaginateAsync<T>(this IQueryable<T> queryable, PageQuery query, CancellationToken cancellationToken = default): Paginates a query with a PageQuery object asynchronously
Parameters:
queryable: The query to paginateindex/query.Index: Page index (≥ 0)size/query.Limit: Number of items per page (≥ 1)cancellationToken: Cancellation token (optional)
Returns:
Task<Page<T>>: A task containing the page of results
Exceptions:
ArgumentOutOfRangeException: IfIndex < 0orLimit < 1
⚡ Performance
This package uses Entity Framework Core's asynchronous methods:
CountAsync()to count itemsToListAsync()to retrieve data
This helps avoid blocking the thread during database operations.
🔗 Links
No packages depend on Argon.Extensions.Pagination.EntityFrameworkCore.
.NET 8.0
- Argon.Extensions.Pagination (>= 8.5.0)
- Microsoft.EntityFrameworkCore (>= 8.0.18)