7
votes

Pagination à travers un iéenérable

J'ai un objet iEnumerable ( iEnumerable ) et j'aimerais récupérer une ligne spécifiée de l'objet. Donc, si je suis à la page 2, je voudrais sélectionner la ligne deux de l'objet iEnumerable, puis transmettez-la à une autre classe, etc.

Je suis un peu coincé pour le moment, des idées?


0 commentaires

4 Réponses :


2
votes

Si je comprends vos exigences correctement, quelque chose comme ce mécanisme de pagination doit fonctionner:

int pageSize = 10;
int pageCount = 2;

iEnumerable.Skip(pageSize*pageCount).Take(1);


3 commentaires

En fait, ce serait prendre les 2 premiers résultats après le saut, mais la partie Skip est la bonne idée.


@Daniel - oui vous avez raison. Merci. J'ai édité ma réponse.


Votre arithmétique est légèrement éteinte. La deuxième ligne de la deuxième page a l'indice 11, pas 20 (en supposant 10 lignes par page, et que les lignes et les pages commencent à l'index 1).



15
votes

regarder les fonctions .take () et .skip () . Je fais normalement quelque chose comme ceci: xxx


3 commentaires

Il convient de mentionner que ceci est basé sur 0. Pour appeler la première page, vous devez passer 0.


Pourquoi oui, car une indexation basée sur 1 est simplement complexe. Surtout lorsqu'il s'agit de C # qui utilise une indexation à base de 0.


Est-ce vraiment utile de mentionner que c'est à 0? J'imagine que c'est une hypothèse de base. Il serait utile de mentionner s'il était basé sur une raison quelconque



1
votes

En supposant que les pages et les lignes commencent à 1, et il existe un nombre fixe de lignes par page (selon 10), vous devez transformer le numéro de page et la ligne à un index comme suit:

int page = 2;
int row = 2;

int rowsPerPage = 10;

IEnumerable<MyClass> source = ...

MyClass result = source.ElementAt((page - 1) * rowsPerPage + (row - 1));


2 commentaires

-1 extrêmement surchargé et inefficace pour quelles sont les exigences d'origine.


@Timothy Baldridge: Il est inefficace si vous faites cela pour obtenir chaque élément sur une page. Mais le PO déclare qu'il veut obtenir un seul élément sur une page spécifique. Donc, je ne dirais pas qu'un simple élémenat est surchargé ou inefficace ici.



0
votes

J'ai implémenté une solution dynamique dans VB.NET, j'espère utile: xxx


0 commentaires