2010-09-12 9 views
6

Me gustaría hacer una cadena de valores separada por comas con la función de agregado de Linq. Alguien sabe cómo hacer esto?Función agregada de Linq, Cómo hacer una cadena CSV

Dada una matriz de cadenas como esto:

var authors = new string[] {"author 1", "author 2", "author 3"}; 

¿Cómo consigo una sola cadena como esta autor 1, 2 autor, autor 3? Estoy pensando que algo como authors.Aggregate(author => author + ",") podría hacer esto pero no estoy seguro.

Ideas?

+0

duplicado posible de [explicó LINQ agregado algoritmo] (http://stackoverflow.com/questions/7105505/linq-aggregate-algorithm-explain) – Jamiec

Respuesta

11

Si sólo está buscando para comas separarlos, sólo tiene que utilizar string.join:

string.Join(", ", authors); 

Esto funcionará con cualquier < cadena IEnumerable> (al menos en .NET 4.0), pero ha trabajado con matrices de cadenas desde 1.0.

+0

O Genial, creo que Aggregate no es realmente lo que necesito. Parece que Join es lo correcto. Voy a intentar esto ... gracias. –

+0

Buena llamada - ¡Me olvidé de ese método! – ColinE

6

Como dice Bennor McCarthy, sería mucho mejor usar string.Join para este propósito. Si realmente desea utilizar Enumerable.Aggregate embargo, esto debe hacer:

string csvString = authors.Aggregate((csvSoFar, author) => csvSoFar + ", " + author); 

Esto es más o menos equivalente a:

string csvString = authors.First(); 

foreach (string author in authors.Skip(1)) 
{ 
    csvString += ", " + author; 
} 
+2

Gracias, Ya parece que Join es mucho más fácil de abordar para esta tarea. –

Cuestiones relacionadas