我有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对象的建议进行连接。
你可以使用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
您需要提供初始化程序,否则第一个元素将不会添加string joined = list.Aggregate(new StringBuilder(),
(sb, s) => sb.Append(s).Append(';'),
sb => (sb.Length > 0) ? sb.ToString(0, sb.Length - 1)
: "");
:
;
你可以使用下面的代码
list.Aggregate((i, j) => i + ";" + j);