2015-08-26 38 views
6

Mam instrukcję linq ForEach, która wywołuje metodę dla każdego obiektu Report na liście. Ta metoda zwraca tablicę tabel danych dla każdego wywołania i chcę jakoś odzyskać zwrócone dane. Jak mogę to zrobić za pomocą linq ForEach zamiast starej szkoły foreach (var x in x's) { ... }? Tu jest mój kodu:Jak zdobyć instrukcję `ForEach`, aby zwrócić dane dotyczące wywołania metody dla każdego obiektu listy?

Reports.ForEach(r => r.LoadTableData(Event, Human, Animal, exData)); 

Jak mogę odzyskać każdy DataTable[] że LoadTableData wraca?

Odpowiedz

11

Zastosowanie Select zamiast:

var tables = Reports.Select(r => r.LoadTableData(Event, Human, Animal, exData)); 

Selectodwzorowuje kolekcję na inny (w tym przypadku, zbiór Report na zbiór DataTable[]). W rzeczywistości metoda Select jest często nazywana map w innych językach, takich jak Scala i Ruby.

ForEach wykonuje dowolne działanie dla każdego elementu z kolekcji źródłowej.

I tak przy okazji, ForEach nie jest częścią rozszerzeń LINQ. To po prostu inna metoda na List<T>.

+0

Ohhh bardzo dobrze wiedzieć. Pomyślałem, że to część Linq, bo to jedyny czas, kiedy naprawdę go użyłem, dzięki! –

+0

Dzięki, znalazłem to po zrobieniu metody rozszerzenia ForEachWithReturn . –