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.Pagination which will be installed automatically.

✨ Features

  • PaginateAsync() extension for asynchronous queries
  • CancellationToken support
  • Optimization for database queries
  • Uses Entity Framework Core's ToListAsync() and CountAsync()

🚀 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 asynchronously
  • PaginateAsync<T>(this IQueryable<T> queryable, PageQuery query, CancellationToken cancellationToken = default) : Paginates a query with a PageQuery object asynchronously

Parameters:

  • queryable : The query to paginate
  • index / 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 : If Index < 0 or Limit < 1

⚡ Performance

This package uses Entity Framework Core's asynchronous methods:

  • CountAsync() to count items
  • ToListAsync() to retrieve data

This helps avoid blocking the thread during database operations.

No packages depend on Argon.Extensions.Pagination.EntityFrameworkCore.

Version Downloads Last updated
8.5.0 7 11/30/2025
8.4.0 2 11/17/2025
8.3.0 91 07/17/2025