J'ai un objet iEnumerable ( Je suis un peu coincé pour le moment, des idées? P> iEnumerable
4 Réponses :
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);
En fait, ce serait Skip code> 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).
regarder les fonctions .take () code> et
.skip () code>. Je fais normalement quelque chose comme ceci:
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
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));
-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.
J'ai implémenté une solution dynamique dans VB.NET, j'espère utile: