2010-09-12 15 views
6

Linq'in Toplama işleviyle birlikte bir virgülle ayrılmış değer dizesi oluşturmak istiyorum. Bunu nasıl yapacağını bilen var mı?Linq'in Toplama İşlevi, CSV Dizesi Oluşturma

böyle dizelerden oluşan bir dizi Verilen:

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

Nasıl bu yazar 1, yazar 2 gibi tek dize alırım, yazar 3? authors.Aggregate(author => author + ",") gibi bir şeyin bunu yapabileceğini düşünüyorum, ancak emin değilim.

Fikirler?

string.Join(", ", authors); 

Bu (en azından .NET 4.0)> IEnumerable < dize ile çalışacaktır ancak çalıştı:

+0

Olası yinelenen http://stackoverflow.com:

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

Bu kabaca eşittir/questions/7105505/linq-aggregate-algorithm-açıklanan) – Jamiec

cevap

11

sadece arıyorsanız onları virgül-ayırmak, sadece string.join kullanmak 1.0'dan beri diziler dizileri ile.

+0

O Cool, Sanırım Agrega ihtiyacım olan şey değil. Görünüşe göre bir şey doğrudur. Bunu deneyeceğim ... teşekkürler. –

+0

İyi çağrı - Bu yöntemi unuttum! – ColinE

6

Bennor McCarthy'nin dediği gibi, bu amaç için string.Join'u kullanmanız çok daha iyi olur. Gerçekten olsa Enumerable.Aggregate kullanmak istiyorsunuz, bu yapmalıdır:

string csvString = authors.First(); 

foreach (string author in authors.Skip(1)) 
{ 
    csvString += ", " + author; 
} 
([LINQ Agrega algoritması açıkladı] arasında
+2

Teşekkürler, Ya Katıl gibi görünüyor, bu görev için çok daha basit bir yaklaşım. –

İlgili konular