2010-04-21 27 views
24

¿Cómo puedo escribir una expresión Linq (o cualquier otra cosa) que seleccione un elemento de una lista y los pueda unir?.Net - Unir todos los elementos de una lista en una cadena de salida

Ejemplo

IList<string> data = new List<string>(); 

data.Add("MyData1"); 
data.Add("MyData2"); 

string result = //some linq query... I try data.Select(x => x + ","); 

//result = "MyData1, MyData2" 

Respuesta

54

¿Por qué no vas con (String.Join Method)

string joined = String.Join(",", data.ToArray()); 

Pero si tiene que ser LINQ, podría intentar

string joinedLinq = data.Aggregate((i, j) => i + "," + j); 
+3

ver mi advertencia sobre Agregado a continuación ... –

+0

String.Join era exactamente lo que necesitaba! – Melursus

+4

@Melurus, también tenga en cuenta que en .NET 4 nuevo, la llamada a .ToArray() no es necesaria, ni necesita ser una colección de cadenas. string.Join tiene una sobrecarga que acepta 'IEnumerable '. –

1

Puede utilizar agregada cuando necesita unirse a una lista en un solo objeto agregado.

string s = ""; 
if(data.Count > 0) 
    s = data.Aggregate((a, b) => a + ',' + b); 
11

Usted puede tener la tentación de utilizar Agregada() si usted se está pegando con LINQ

IList<int> data = new List<int>(); 

data.Add(123); 
data.Add(456); 

var result = data.Select(x => x.ToString()).Aggregate((a,b) => a + "," + b); 

Yo no recomendaría este porque como he encontrado la manera dura esta fallará si la lista contiene cero elementos, o si solo tenía 1 elemento. Me olvido, pero falla todo lo mismo :-)

String.Join(...) is the best way 

En el ejemplo anterior, donde el tipo de datos no es una cadena que puede hacer esto:

string.Join(",", data.Select(x => x.ToString()).ToArray()) 
+3

Lanzará si el enumerable no tiene elementos. Comprobar el recuento == 0. –

+0

Como Anthony Pegram escribió 'String.Join (delimitador, IEnumerable )' ¡es la mejor solución en .NET 4! –

3

Como Anthony Pegram escribió String.Join<T>(delimiter, IEnumerable<T>) es la mejor solución en .NET 4!

Cuestiones relacionadas