Concat todas as strings dentro de uma List usando LINQ

Existe alguma expressão LINQ fácil para concatenar meus itens de coleção List inteiros para uma única string com um caractere delimitador?

E se a coleção for de objects personalizados em vez de string ? Imagine que preciso concatenar em object.Name .

Usando o LINQ, isso deve funcionar;

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

descrição de class:

 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(); } } 

E aqui está o meu melhor 🙂

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

No .NET 4.0 e posterior:

 String.Join(delimiter, list); 

é suficiente. Para versões mais antigas você precisa:

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

Isto é para um array de strings:

 string.Join(delimiter, array); 

Isto é para uma lista :

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

E isso é para uma lista de objects 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)); 

Boa pergunta. Eu tenho usado

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

Não é LINQ, mas funciona.

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

Eu acho que se você definir a lógica em um método de extensão, o código será muito mais legível:

 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(", "); 

Eu fiz isso usando linq:

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