我已经看到这个问题(Using LINQ to concatenate strings)适用于字符串,但如果我想连接一个字符串列表,其中字符串是类的属性,会发生什么?
该问题中提出的方法不起作用(我已经尝试过)。
给定一个数组或者我想要一个包含其名称串联的字符串。
x => person.Name
我该如何解决这个问题?
答案 0 :(得分:12)
这将为你做好准备:
var res = yourList.Select(x => x.Name).Aggregate((current, next) => current + ", " + next);
但是,我建议您使用String.Join(string separator, IEnumerable<string> values)
:
var res = String.Join(", ", yourList.Select(x => x.Name));
其他详细信息:
在这种情况下说实话,您可以使用Aggregate
或String.Join()
。如果我们测试两个查询的执行时间,我们将看到第二个比第一个更快。但原因不是Aggregate()
功能。问题是我们在循环中连接字符串。它会导致大量中间字符串,这会导致性能不佳。如果您仍想使用StringBuilder.Append
并提高效果,则可以使用Aggregate
:
var res = yourList.Select(x => x.Name)
.Aggregate(new StringBuilder(), (current, next) => current.Append(next).Append(", ")).ToString();
但是,String.Join()
已在内部使用StringBuilder
,因此它将是最佳选择。
答案 1 :(得分:3)
如果是对象的LINQ,则应使用String.Join
:
var result = String.Join(",", data.Select(x => x.MyProperty));