使用linq收集到字符串

Kri*_*s-I 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" } );
Run Code Online (Sandbox Code Playgroud)

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

谢谢,

Jon*_*eet 50

如果您使用的是.NET 4:

string lastNames = string.Join(",", PersonList.Select(x => x.LastName));
Run Code Online (Sandbox Code Playgroud)

如果您使用的是.NET 3.5:

string lastNames = string.Join(",", PersonList.Select(x => x.LastName)
                                              .ToArray());
Run Code Online (Sandbox Code Playgroud)

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


Jen*_*ens 8

您可以使用

PersonList.Select(p => p.LastName).Aggregate((s1,s2) => s1 + ", " + s2);
Run Code Online (Sandbox Code Playgroud)


ang*_*son 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());
Run Code Online (Sandbox Code Playgroud)

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

string result = String.Join(", ",
    from p in PersonList
    select p.LastName);
Run Code Online (Sandbox Code Playgroud)

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

对于.NET 3.5:

string result = String.Join(", ", PersonList.Select(p => p.LastName).ToArray());
Run Code Online (Sandbox Code Playgroud)

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

string result = String.Join(", ", PersonList.Select(p => p.LastName));
Run Code Online (Sandbox Code Playgroud)

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