如何聚合IEnumerable 使用Linq Aggregate函数字符串

问题描述 投票:0回答:3

我有qazxsw poi集合,我想连接成带分隔符的单个字符串;

例如{“一”,“二”,“三”} - >“一;二;三;”

可以使用以下功能吗?

Ienumerable<string>

我也试过这段代码:

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

两个样本都不起作用。

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

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

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

linq-to-sql aggregate
3个回答
4
投票

你可以使用http://social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/dac496c0-5b37-43ba-a499-bb8eff178706/。如果您使用的是.NET4,那么您可以直接使用String.Join

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

1
投票

您需要提供初始化程序,否则第一个元素将不会添加string joined = list.Aggregate(new StringBuilder(), (sb, s) => sb.Append(s).Append(';'), sb => (sb.Length > 0) ? sb.ToString(0, sb.Length - 1) : "");

;

1
投票

你可以使用下面的代码

list.Aggregate((i, j) => i + ";" + j);
© www.soinside.com 2019 - 2024. All rights reserved.