Ita*_*vin 0 aggregate linq-to-sql
我有一个Ienumerable<string>集合,我想用分隔符连接成一个字符串;
例如 {"One","Two","Three"} -> "One;Two;Three;"
是否可以使用以下功能?
List<string> list = new List<string>(){"One","Two","Three"};
list.Aggregate<String>((x,y) => x + String.Format("{0};",y));
Run Code Online (Sandbox Code Playgroud)
我也试过这个代码:
list.Aggregate<String>((x,y) => String.Format("{0};{1}",x,y));
Run Code Online (Sandbox Code Playgroud)
两个样品都不起作用。
编辑:我发现使用 Linq-2-sql 或 Linq-2-sql 中的聚合函数无法执行我想要的操作。
EDIT2:我使用的解决方法是检查原始 linq 查询返回的项目......并将它们复制到一个新列表,并按照下面的 linq 对象而不是 linq-2-sql 对象的答案中的建议进行连接.
您可以仅用String.Join于此目的。如果您使用的是 .NET4,那么您可以使用直接接受一个的重载IEnumerable<string>:
string joined = string.Join(";", list);
Run Code Online (Sandbox Code Playgroud)
如果您使用的是旧版本的框架,那么您将需要使用带string[]数组的重载,如有必要,首先将您的集合转换为数组:
string joined = string.Join(";", list.ToArray());
Run Code Online (Sandbox Code Playgroud)
编辑...
当然,如果您Aggregate出于某种原因真的想使用,那么没有什么可以阻止您。如果是这样,通常建议使用 aStringBuilder而不是多个字符串分配来构建您的字符串:
string joined = list.Aggregate(new StringBuilder(),
(sb, s) => sb.Append(s).Append(';'),
sb => (sb.Length > 0) ? sb.ToString(0, sb.Length - 1)
: "");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3074 次 |
| 最近记录: |