如何使用带单引号的Linq聚合

时间:2011-11-11 14:39:30

标签: c# linq aggregate

我们假设我有一组字符串,如下所示:

IList<string> myList = new List<string>(){"one", "two", "three"};

使用myList.Aggregate我希望最终得到“'one','two','three'”(包括单引号)

有人只有使用聚合函数才能做到这一点吗?

我正在思考一些事情
myList.Aggregate((increment, seed) => string.Concat(increment, ", ", seed));

但这只是解决方案的一半。

2 个答案:

答案 0 :(得分:6)

使用Aggregate而不是更简单的string.Join的任何理由?

string joined = string.Join(", ", myCollection.Select(x => "'" + x + "'"));

(如果您使用的是.NET 3.5,请添加ToArray电话。)

可以使用string.Join实现Aggregate(理想情况下使用StringBuilder),但这并不是非常令人愉快。假设一个非空的集合,我认为这应该这样做:

string csv = myCollection.Aggregate(new StringBuilder("'"),
                 (sb, x) => sb.AppendFormat("{0}', '"),
                 sb => { sb.Length -= 3;
                         return sb.ToString(); });

答案 1 :(得分:2)

由于您指定“仅使用聚合函数”,如何:

myCollection.Aggregate(string.Empty, (soFar, next) => 
                       soFar + (soFar == string.Empty ? soFar : ", ") 
                       + "'" + next + "'")

(或)

myCollection.Aggregate(string.Empty, (soFar, next) =>
                                  string.Format("{0}{1}'{2}'", 
                                  soFar, soFar == string.Empty ? soFar : ", ", next))

以这种方式使用Aggregate进行字符串连接但确实效率不高。

编辑:已更新,以摆脱领先的,