2015-08-26 79 views
6

Ho una dichiarazione linq ForEach che chiama un metodo per ogni oggetto Report nell'elenco. Questo metodo restituisce una matrice di tabelle di dati per ogni chiamata e voglio in qualche modo ottenere i dati restituiti. Come posso farlo usando linq ForEach piuttosto che la vecchia scuola foreach (var x in x's) { ... }? Ecco il mio codice:Come ottenere l'istruzione linq `ForEach` per restituire i dati sulla chiamata al metodo effettuata per ciascun oggetto elenco?

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

Come posso tornare ogni DataTable[] che LoadTableData sta tornando?

risposta

11

Uso Select invece:

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

SelectMappe una raccolta su un altro (in questo caso, una raccolta di Report in una collezione di DataTable[]). In effetti, il metodo Select viene spesso chiamato map in altri linguaggi come Scala e Ruby.

ForEach esegue un'azione arbitraria per ogni elemento nella raccolta di origine.

E btw, ForEach non fa parte delle estensioni LINQ. È solo un altro metodo su List<T>.

+0

Ohhh molto buono a sapersi. Ho pensato che fosse parte di linq perché è l'unica volta che l'ho usato davvero, grazie! –

+0

Grazie, ho trovato questo dopo aver fatto ForEachWithReturn metodo di estensione. –