Concat todas las cadenas dentro de una lista utilizando LINQ

¿Hay alguna expresión LINQ fácil para concatenar todos los elementos de la colección List en una sola string con un carácter delimitador?

¿Qué pasa si la colección es de objetos personalizados en lugar de string ? Imagina que necesito concatenar en object.Name .

Al usar LINQ, esto debería funcionar;

 string delimiter = ","; List items = new List() { "foo", "boo", "john", "doe" }; Console.WriteLine(items.Aggregate((i, j) => i + delimiter + j)); 

descripción de la clase:

 public class Foo { public string Boo { get; set; } } 

Uso:

 class Program { static void Main(string[] args) { string delimiter = ","; List items = new List() { new Foo { Boo = "ABC" }, new Foo { Boo = "DEF" }, new Foo { Boo = "GHI" }, new Foo { Boo = "JKL" } }; Console.WriteLine(items.Aggregate((i, j) => new Foo{Boo = (i.Boo + delimiter + j.Boo)}).Boo); Console.ReadKey(); } } 

Y aquí está mi mejor 🙂

 items.Select(i => i.Boo).Aggregate((i, j) => i + delimiter + j) 

En .NET 4.0 y posterior:

 String.Join(delimiter, list); 

es suficiente.

Esto es para una matriz de cadenas:

 string.Join(delimiter, array); 

Esto es para una lista :

 string.Join(delimiter, list.ToArray()); 

Y esto es para una lista de objetos personalizados:

 string.Join(delimiter, list.Select(i => i.Boo).ToArray()); 
 using System.Linq; public class Person { string FirstName { get; set; } string LastName { get; set; } } List persons = new List(); string listOfPersons = string.Join(",", persons.Select(p => p.FirstName)); 

Buena pregunta. He estado usando

 List myStrings = new List{ "ours", "mine", "yours"}; string joinedString = string.Join(", ", myStrings.ToArray()); 

No es LINQ, pero funciona.

 List strings = new List() { "ABC", "DEF", "GHI" }; string s = strings.Aggregate((a, b) => a + ',' + b); 

Creo que si defines la lógica en un método de extensión, el código será mucho más legible:

 public static class EnumerableExtensions { public static string Join(this IEnumerable self, string separator) { return String.Join(separator, self.Select(e => e.ToString()).ToArray()); } } public class Person { public string FirstName { get; set; } public string LastName { get; set; } public override string ToString() { return string.Format("{0} {1}", FirstName, LastName); } } // ... List people = new List(); // ... string fullNames = people.Join(", "); string lastNames = people.Select(p => p.LastName).Join(", "); 

Lo he hecho usando linq:

 var oCSP = (from P in db.Products select new { P.ProductName }); string joinedString = string.Join(",", oCSP.Select(p => p.ProductName));