Przetwarzanie kolekcji z Linq to Object cz1
Linq
Linq jest językiem zapytań, który dodaje warstwę abstrakcji pomiędzy różnymi typami danych a obiektami. Zapytania można zapisać na dwa sposoby:
- Składnia zapytań, gdzie zapis linq jest podobny do zapytań SQL-owych, nie mniej jednak dla mnie jest mało intuicyjny i z tego sposobu nie korzystam.
Przykładowe zapytanie
- Fluent Api, ten rodzaj zapisu jest dla mnie dużo bardziej czytelny, do zapisu wykorzystujemy łańcuch metod
Dostępne operacje
Wśród dostępnych operacji chciałbym opisać:
- Wybieranie danych
- Filtrowanie
- Szeregowanie
- Operacje statystyczne
Wybieranie danych
Przez wybieranie danych mam na myśli wybranie elementów enumeracji lub też ich części składowych.
Select oraz SelectMany
Select umożliwia wybranie poszczególnych elementów lub ich odpowiednich przekształceń. Co ważne dla jednego elementu enumeracji możliwe jest pobranie tylko jednego elementu. Inaczej sprawa się ma z SelectMany, gdzie dla pojedynczego elementu wejściowego możemy pobrać większą ilość elementów.
W wynikowej kolekcji dostaniemy listę potęg elementów wejściowych.
Jak widzimy możemy odbierać więcej niż jeden element z każdego elementu wejściowego przy próbie wykonania tej samej operacji dostaniemy komunikat o błędzie. W tym konkretnym przypadku, że nie da się konwertować typu IEnumerable<IEnumerable<int>> na tym IEnumerable<int>.
Skip, SkipWhile
Umożliwia pominięcie elementów z kolekcji. Dla skip pomijamy konkretną liczbę elementów, z kolei SkipWhile potrafi pominąć elementy do momentu, kiedy warunek pominięcia zostanie nie spełniony.
W powyższych przykładach pominięte zostaną pierwsze 2 elementy.
Take, TakeWhile
Działają na identycznej zasadzie jak skip, z tą różnicą, że Take i TakeWhile wybierają elementy.
W tych przykładach wybierane są pierwsze cztery elementy.
Cast
Cast umożliwia rzutowanie elementów z kolekcji na inny typ.
Filtrowanie, szeregowanie oraz metody statystyczne opiszę w kolejnych postach. A już dzisiaj zapraszam do zapoznania się z przykładami dostępnymi na moim GitHub-ie https://github.com/Matejkos/BlogProjects/tree/master/LinqObjectOperations
CDN