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); });