Metodele Skip și Take în LINQ
Există mai multe metode în LINQ care permit obținerea unei părți dintr-o colecție, în special metodele Skip, Take, SkipWhile și TakeWhile.
Metoda Skip()
Metoda Skip() omite un număr specificat de elemente. Numărul de elemente omise este transmis ca parametru metodei:
string[] people = { "Tom", "Sam", "Bob", "Mike", "Kate" };
// omitem primele două elemente
var result = people.Skip(2); // "Bob", "Mike", "Kate"
foreach (var person in result)
Console.WriteLine(person);
În acest caz, omitem primele două elemente. Afișarea pe consolă:
Bob
Mike
Kate
Dacă trebuie să omitem un anumit număr de elemente de la sfârșitul colecției, se utilizează metoda SkipLast():
string[] people = { "Tom", "Sam", "Bob", "Mike", "Kate" };
// omitem ultimele două elemente
var result = people.SkipLast(2); // "Tom", "Sam", "Bob"
foreach (var person in result)
Console.WriteLine(person);
În acest caz, omitem ultimele două elemente. Afișarea pe consolă:
Tom
Sam
Bob
Metoda SkipWhile()
Metoda SkipWhile() omite o secvență de elemente începând de la primul element, până când acestea îndeplinesc o anumită condiție:
SkipWhile(Func<TSource, bool> predicate);
Metoda primește un delegat care reprezintă condiția, primește fiecare element al colecției și returnează valoarea true dacă elementul corespunde condiției. De exemplu:
string[] people = { "Tom", "Sam", "Mike", "Kate", "Bob" };
// omitem primele elemente a căror lungime este 3
var result = people.SkipWhile(p => p.Length == 3); // "Mike", "Kate", "Bob"
foreach (var person in result)
Console.WriteLine(person);
Aici metoda SkipWhile omite elementele a căror lungime este de 3 caractere. Primele două elemente din array-ul people ("Tom", "Sam") corespund acestei condiții și vor fi omise. La al treilea element ("Mike"), secvența se întrerupe, astfel că ultimul element ("Bob"), a cărui lungime este tot de 3 caractere, nu va fi omis și va fi inclus în colecția de ieșire:
Mike
Kate
Bob
Dacă primul element din array ar fi avut o lungime diferită de 3 caractere, secvența de elemente omise s-ar fi întrerupt deja la primul element, iar metoda SkipWhile ar fi returnat toate elementele array-ului.
Metoda Take()
Metoda Take() extrage un anumit număr de elemente. Numărul de elemente extrase este transmis metodei ca parametru. De exemplu, să extragem primele trei elemente:
string[] people = { "Tom", "Sam", "Mike", "Kate", "Bob" };
// extragem primele 3 elemente
var result = people.Take(3); // "Tom", "Sam", "Mike"
foreach (var person in result)
Console.WriteLine(person);
Metoda TakeLast() extrage un anumit număr de elemente de la sfârșitul colecției:
string[] people = { "Tom", "Sam", "Mike", "Kate", "Bob" };
// extragem ultimele 3 elemente
var result = people.TakeLast(3); // "Mike", "Kate", "Bob"
foreach (var person in result)
Console.WriteLine(person);
Metoda TakeWhile()
Metoda TakeWhile() selectează o secvență de elemente începând de la primul element, până când acestea îndeplinesc o anumită condiție:
TakeWhile(Func<TSource, bool> predicate);
Metoda primește un delegat care reprezintă condiția, primește fiecare element al colecției și returnează valoarea true dacă elementul corespunde condiției. De exemplu:
string[] people = { "Tom", "Sam", "Mike", "Kate", "Bob" };
// extragem primele elemente a căror lungime este 3
var result = people.TakeWhile(p => p.Length == 3); // "Tom", "Sam"
foreach (var person in result)
Console.WriteLine(person);
Aici metoda TakeWhile selectează elementele a căror lungime este de 3 caractere. Primele două elemente din array-ul people ("Tom", "Sam") corespund acestei condiții și vor fi selectate în colecția de ieșire. La al treilea element ("Mike"), secvența se întrerupe, astfel că ultimul element ("Bob"), a cărui lungime este tot de 3 caractere, nu va fi inclus în colecția de ieșire:
Tom
Sam
Dacă primul element din array ar fi avut o lungime diferită de 3 caractere, în acest caz metoda TakeWhile ar fi returnat 0 elemente.
Afișare paginată
Combinând ambele metode - Take și Skip, putem selecta un anumit număr de elemente începând de la un element specificat. De exemplu, să selectăm două elemente începând de la al patrulea (adică să omitem primele 3 elemente):
string[] people = { "Tom", "Sam", "Mike", "Kate", "Bob", "Alice" };
// omitem 3 elemente și selectăm 2 elemente
var result = people.Skip(3).Take(2); // "Kate", "Bob"
foreach (var person in result)
Console.WriteLine(person);
Afișarea pe consolă:
Kate
Bob