使用linq收集到字符串

时间:2010-09-29 11:35:20

标签: c# linq

我有一个班级

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }   
}

List<Person> PersonList = new List<Perso>();
PersonList.Add(new Person() { FirstName = "aa", LastName = "AA" } );
PersonList.Add(new Person() { FirstName = "bb", LastName = "BB" } );

我想使用Linq获取带有LastName的逗号分隔符的字符串,结果如下: AA,BB

谢谢,

3 个答案:

答案 0 :(得分:47)

如果您使用的是.NET 4:

string lastNames = string.Join(",", PersonList.Select(x => x.LastName));

如果您使用的是.NET 3.5:

string lastNames = string.Join(",", PersonList.Select(x => x.LastName)
                                              .ToArray());

(基本上.NET 4在string.Join上添加了一些额外的重载。)

答案 1 :(得分:8)

您可以使用

PersonList.Select(p => p.LastName).Aggregate((s1,s2) => s1 + ", " + s2);

答案 2 :(得分:8)

要使用分隔符连接字符串项,可以使用String.Join

在.NET 3.5及更低版本中,这会将一个数组作为第二个参数,但在4.0中它有一个需要IEnumerable<T>的重载,其中T在这种情况下是String

有了这些信息,这是你想要的代码。

对于.NET 3.5:

string result = String.Join(", ",
    (from p in PersonList
     select p.LastName).ToArray());

对于.NET 4.0,您可以省略对ToArray的调用:

string result = String.Join(", ",
    from p in PersonList
    select p.LastName);

如果你想删除LINQ语法并只使用LINQ扩展方法,那么这个变体就是一样的:

对于.NET 3.5:

string result = String.Join(", ", PersonList.Select(p => p.LastName).ToArray());

对于.NET 4.0,您可以省略对ToArray的调用:

string result = String.Join(", ", PersonList.Select(p => p.LastName));

注意:上面的3.5种变体当然也适用于4.0,它们没有删除或替换旧方法,只是为典型情况添加了一种。