2010-04-21 42 views
24

如何編寫從列表中選擇項目並將它們連接在一起的Linq表達式(或其他)?.Net - 將輸出字符串中列表的所有項加入到一起

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" 

回答

54

爲什麼不乾脆去(String.Join Method

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

但如果它必須是LINQ,你可以嘗試

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

看到我的警告下面的聚合... – 2010-04-21 05:17:20

+0

String.Join正是我所需要的! – Melursus 2010-04-21 13:24:12

+4

@Melurus,也注意到.NET 4中的新功能,對.ToArray()的調用不是必需的,也不需要是字符串的集合。 string.Join有一個超載,它接受'IEnumerable '。 – 2010-04-21 13:37:52

1

您可以使用集合時您需要將列表連接到單個聚合對象。

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

你可能會被使用骨料()如果你正在使用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); 

我不會推薦這因爲我發現了艱辛的道路,這將失敗,如果該列表包含零個項目 - 或者只有1個項目。我忘了,但它失敗都一樣:-)

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

在上面的例子中,其中數據類型是不是字符串,你可以這樣做:

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

如果枚舉沒有元素,它將拋出。檢查計數== 0. – 2010-04-21 13:35:29

+0

正如Anthony Pegram所寫的'String.Join (分隔符,IEnumerable )'是.NET 4中最好的解決方案! – 2015-11-06 11:53:20

3

安東尼Pegram寫道String.Join<T>(delimiter, IEnumerable<T>)是最好的.NET 4中的解決方案!

相關問題