我有一个班级
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
谢谢,
答案 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,它们没有删除或替换旧方法,只是为典型情况添加了一种。