Am rezolvat acest lucru un pic diferit de ceea ce au ceilalți, așa cum trebuia să-mi fac propriul paginator, cu un repetor. Așadar, am făcut prima dată o colecție de numere de pagini pentru colecția de articole pe care le am:
// assumes that the item collection is "myItems"
int pageCount = (myItems.Count + PageSize - 1) / PageSize;
IEnumerable pageRange = Enumerable.Range(1, pageCount);
// pageRange contains [1, 2, ... , pageCount]
Using this I could easily partition the item collection into a collection of "pages". A page in this case is just a collection of items (IEnumerable
). This is how you can do it using Skip
and Take
together with selecting the index from the pageRange
created above:
IEnumerable> pageRange
.Select((page, index) =>
myItems
.Skip(index*PageSize)
.Take(PageSize));
Desigur, trebuie să ocupați fiecare pagină ca o colecție suplimentară, dar de ex. dacă repetiți cuiburi, atunci acest lucru este de fapt ușor de manevrat.
Versiunea one-liner TLDR ar fi aceasta:
var pages = Enumerable
.Range(0, pageCount)
.Select((index) => myItems.Skip(index*PageSize).Take(PageSize));
Care poate fi folosit ca:
for (Enumerable- page : pages)
{
// handle page
for (Item item : page)
{
// handle item in page
}
}