.NET & Linq - Łączenie kolekcji list IEnumerable<List<object>> w jedną kolekcję
Niewielki fragment kodu, pozwalający na uzyskanie jednej kolekcji elementów z kolekcji list IEnumerable<List<object>>.
W czym problem?
Wyobraźmy sobie sytuację, że mamy listę obiektów, które wystawiają publicznie listę elementów np. typu int. Następnie skorzystajmy z metody Select() dostarczanej przez Linq, tak byśmy zebrali te listy należące do obiektów trzymanych w kolekcji. Kod taki, może wyglądać podobnie do:// NaszObiekt.InnaLista jest typu List<int>
IEnumerable<List<int>> elementy = ListaObiektow.Select(o => o.InnaLista);
Jak widać, w efekcie takiej operacji otrzymaliśmy obiekt typu IEnumerable<List<int>>, co w wielu przypadkach (jeśli nie większości) może nie być zadowalające. W pewnych okolicznościach wygodniej byłoby otrzymać kolekcję samych int-ów, a nie kolekcję list. Rozwiązane nasuwa się samo - stworzyć nowy obiekt, iterując elementy istniejącego, rzecz jednak w tym, że nie musimy tego robić ręcznie w sposób jawny, ponieważ taka funkcjonalność, również jest już dostarczona przez Linq! Całość sprowadza się do odpowiedniego wykorzystania metody SelectMany(). Przejdźmy od razu do modyfikacji poprzedniego kodu:
List<int> elementyLista = ListaObiektow.Select(o => o.InnaLista).SelectMany(i => i).ToList();
No i po krzyku. Warto o tym pamiętać, żeby nie tworzyć zbędnego kodu, bo jak to mówią mądrzy ludzie - to kod psuje aplikacje ;)
Komentarze (0) - Nikt jeszcze nie komentował - bądź pierwszy!