Sommaire

Considérations autour de la pagination en LINQ

Il arrive que le résultat d’une requête LINQ constitue un grand volume de données. Il s’agit alors d’obtenir le résultat grâce à un système de pagination, un peu comme ce qui se pratique dans une API REST.

Pour cela, on utilise les opérateurs LINQ Skip et Take dont voici les prototypes :

public static IEnumerable<TSource> Skip<TSource>(  
      this IEnumerable<TSource> source,  
      int count  
)

public static IEnumerable<TSource> Take<TSource>(  
      this IEnumerable<TSource> source,  
      int count  
)

Idéalement, on commence à définir un nombre de résultats par page :

int nombreObjetsParPage = 50;

Puis on récupère le résultat page par page, par exemple ici, la page 42 :

var résultatPage42 = résultat  
  .Skip( nombreObjetsParPage * 42)  
  .Take(nombreObjetsParPage);

À l’index 42 (compte tenu de la pagination), on récupère ici 50 éléments de résultats.