从对象数组中检索属性的数组

时间:2011-07-11 14:34:06

标签: c# linq

假设以下课程:

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

让我们说我有一个Person对象的列表或数组。有没有办法使用LINQ从所有数组元素中检索FirstName属性并返回一个字符串数组。我有一种感觉,我以前见过这样的东西。

希望这个问题有道理。

3 个答案:

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