我已经看到了这个问题(使用LINQ连接字符串),它适用于字符串,但如果我想连接一个字符串列表,其中字符串是类的属性,会发生什么?
该问题中提出的方法不起作用(我已经尝试过).
给定一个数组或人我想要一个包含其名称串联的字符串.
x => person.Name
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?
Far*_*yev 15
这将为您完成工作:
var res = yourList.Select(x => x.Name).Aggregate((current, next) => current + ", " + next);
Run Code Online (Sandbox Code Playgroud)
但是,我建议你使用String.Join(string separator, IEnumerable<string> values):
var res = String.Join(", ", yourList.Select(x => x.Name));
Run Code Online (Sandbox Code Playgroud)
额外细节:
在这种情况下说实话,你可以使用Aggregate或String.Join().如果我们测试两个查询的执行时间,我们将看到第二个比第一个更快.但原因不是Aggregate()功能.问题是我们在循环中连接字符串.它会导致很多中间字符串,从而导致性能下降.StringBuilder.Append如果您仍想使用Aggregate并提高性能,可以使用:
var res = yourList.Select(x => x.Name)
.Aggregate(new StringBuilder(), (current, next) => current.Append(next).Append(", ")).ToString();
Run Code Online (Sandbox Code Playgroud)
但是,已经String.Join()在StringBuilder内部使用,因此它将是最佳选择.
如果是 LINQ to Objects,则应使用String.Join:
var result = String.Join(",", data.Select(x => x.MyProperty));
Run Code Online (Sandbox Code Playgroud)