使用Linq连接类的属性列表

时间:2015-02-24 18:00:28

标签: c# linq

我已经看到这个问题(Using LINQ to concatenate strings)适用于字符串,但如果我想连接一个字符串列表,其中字符串是类的属性,会发生什么?

该问题中提出的方法不起作用(我已经尝试过)。

给定一个数组或者我想要一个包含其名称串联的字符串。

x => person.Name

我该如何解决这个问题?

2 个答案:

答案 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));

其他详细信息:

在这种情况下说实话,您可以使用AggregateString.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));