如何使用Linq Aggregate函数</string>将IEnumerable <string>聚合为字符串

时间:2011-06-22 10:19:01

标签: linq-to-sql aggregate

我有Ienumerable<string>集合,我希望将其连接成带分隔符的单个字符串;

例如{“One”,“Two”,“Three”} - &gt; “一;二;三;”

是否可以使用以下功能?

List<string> list = new List<string>(){"One","Two","Three"};
list.Aggregate<String>((x,y) => x + String.Format("{0};",y));

我也试过这段代码:

list.Aggregate<String>((x,y) => String.Format("{0};{1}",x,y)); 

两个样本都不起作用。

编辑:我发现在Linq-2-sql中使用Linq-2-sql或Aggregate函数不可能做我想做的事。

http://social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/dac496c0-5b37-43ba-a499-bb8eff178706/

EDIT2:我使用的解决方法是检查原始linq查询返回的项目...并将它们复制到新列表并按照以下答案中的linq对象而不是linq-2的建议进行连接-sql对象。

3 个答案:

答案 0 :(得分:4)

您可以使用String.Join。如果您使用的是.NET4,则可以直接使用the overload that takes an IEnumerable<string>

string joined = string.Join(";", list);

如果您使用的是旧版本的框架,那么您需要使用the overload that takes a string[] array代替,必要时首先将您的集合转换为数组:

string joined = string.Join(";", list.ToArray());

修改...

当然,如果你真的想出于某种原因使用Aggregate那么就没有什么能阻止你了。如果是这样,通常建议使用StringBuilder而不是多个字符串分配来构建字符串:

string joined = list.Aggregate(new StringBuilder(),
                               (sb, s) => sb.Append(s).Append(';'),
                               sb => (sb.Length > 0) ? sb.ToString(0, sb.Length - 1)
                                                     : "");

答案 1 :(得分:1)

您需要提供初始值设定项,否则第一个元素不会添加;

list.Aggregate<String>("", (x,y) => x + String.Format("{0};",y));

答案 2 :(得分:1)

您可以使用以下代码

来完成
list.Aggregate((i, j) => i + ";" + j);