</>
Plan du cours — 26/46

Pagination et projection

Intermédiaire
// Pagination : toujours trier avant de paginer pour un résultat stable
var page = await db.Utilisateurs
    .OrderBy(u => u.Id)
    .Skip((numeroPage - 1) * tailleDePage)
    .Take(tailleDePage)
    .ToListAsync();

// Projeter directement vers un DTO : EF Core ne sélectionne
// que les colonnes nécessaires (requête SQL plus légère)
var dtos = await db.Utilisateurs
    .Select(u => new UtilisateurDto(u.Nom, u.Email))
    .ToListAsync();

Cas pratique : endpoint paginé avec filtre, prêt pour une vraie API.

app.MapGet("/utilisateurs", async (
    AppDbContext db, string? recherche, int page = 1, int taille = 20) =>
{
    var query = db.Utilisateurs.AsQueryable();

    if (!string.IsNullOrWhiteSpace(recherche))
        query = query.Where(u => u.Nom.Contains(recherche));

    var resultats = await query
        .OrderBy(u => u.Nom)
        .Skip((page - 1) * taille)
        .Take(taille)
        .ToListAsync();

    return Results.Ok(resultats);
});