2010-04-21 47 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中的解决方案!

相关问题