假设以下课程:
class Person
{
public string FirstName {get;set;}
public string LastName {get;set;}
}
让我们说我有一个Person对象的列表或数组。有没有办法使用LINQ从所有数组元素中检索FirstName属性并返回一个字符串数组。我有一种感觉,我以前见过这样的东西。
希望这个问题有道理。
答案 0 :(得分:12)
当然,很容易:
Person[] people = ...;
string[] names = people.Select(x => x.FirstName).ToArray();
除非您确实需要结果为数组,否则我会考虑使用ToList()
代替ToArray()
,并且可能只是将其作为延迟评估IEnumerable<string>
(即只是致电Select
)。这取决于你将如何处理结果。
答案 1 :(得分:5)
如果您有数组,那么就个人而言,我会使用:
Person[] people = ...
string[] names = Array.ConvertAll(people, person => person.FirstName);
这里;它避免了一些重新分配,并适用于更多版本的.NET。同样地:
List<Person> people = ...
List<string> names = people.ConvertAll(person => person.FirstName);
LINQ将工作,但实际上并不是必需。
答案 2 :(得分:1)
试试这个:
List<Person> people = new List<Person>();
people.Add(new Person()
{
FirstName = "Brandon",
LastName = "Zeider"
});
people.Add(new Person()
{
FirstName = "John",
LastName = "Doe"
});
var firstNameArray = people.Select(p => p.FirstName).ToArray();