C #: Como converter uma lista de objetos em uma lista de uma única propriedade desse objeto?

104

Diga que tenho:

IList<Person> people = new List<Person>();

E o objeto pessoa tem propriedades como FirstName, LastName e Gender.

Como posso converter isso em uma lista de propriedades do objeto Person. Por exemplo, para uma lista de primeiros nomes.

IList<string> firstNames = ???
Do utilizador
fonte

Respostas:

179
List<string> firstNames = people.Select(person => person.FirstName).ToList();

E com classificação

List<string> orderedNames = people.Select(person => person.FirstName).OrderBy(name => name).ToList();
Dario
fonte
Obrigado. Além disso, como eu classificaria isso em ordem alfabética pelo nome?
Usuário de
Listar <string> firstNames = people.Select (person => person.FirstName) .ToList (). Sort (); Isso classificará usando a classificação alfabética padrão de string.
Paul Williams,
Sort () não oferece suporte a uma interface fluente! Ligue para firstNames.Sort () separadamente
Dario
var list = de pessoa em pessoas pedido por pessoa.PrimeiroNome selecione pessoa.NomePrimeiro;
ConsultUtah
uma das melhores respostas no SO! (pode ser minha ignorância) :)
nawfal
5
IList<string> firstNames = (from person in people select person.FirstName).ToList();

Ou

IList<string> firstNames = people.Select(person => person.FirstName).ToList();
Jon Sagara
fonte
3
firstNames = (from p in people select p=>p.firstName).ToList();
Gregoire
fonte
7
Usar uma expressão de consulta neste caso é um exagero, IMO. A notação de pontos tem menos fluff se você tiver apenas uma operação simples.
Jon Skeet,
1
Verdade, mas a questão era "Como isso pode ser feito" ... não "Como isso pode ser feito com a menor quantidade de cotão". Sem intenção de desrespeito, Jon. (Por favor, não me bata).
Dan Esparza,
1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace TestProject
{
    public partial class WebForm3 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            SampleDataContext context = new SampleDataContext();
            List<Employee> l = new List<Employee>();
            var qry = from a in context.tbl_employees where a.Gender=="Female"  
                orderby  a.Salary ascending
            select new Employee() {
                           ID=a.Id,
                           Fname=a.FName,
                           Lname=a.Lname,
                           Gender=a.Gender,
                           Salary=a.Salary,
                           DepartmentId=a.DeparmentId
            };
            l= qry.ToList();
            var e1 =  from  emp in context.tbl_employees
                where emp.Gender == "Male"
                orderby emp.Salary descending
                select  emp;
            GridView1.DataSource = l;
            GridView1.DataBind();
        }
    }
    public class Employee
    {
        public Int64 ID { get; set; }
        public String Fname { get; set; }
        public String Lname { get; set; }
        public String Gender { get; set; }
        public decimal? Salary { get; set; }
        public int? DepartmentId { get; set; }
    }
}
Mohd Shahnawaz
fonte
0
using System.Collections.Generic;
using System.Linq;

IList<Person> people = new List<Person>();
IList<string> firstNames = people.Select(person => person.FirstName).ToList();
M Fatih Koca
fonte
Obrigado por este trecho de código, que pode fornecer alguma ajuda limitada de curto prazo. Uma explicação adequada melhoraria muito seu valor a longo prazo, mostrando por que essa é uma boa solução para o problema e a tornaria mais útil para futuros leitores com outras questões semelhantes. Edite sua resposta para adicionar alguma explicação, incluindo as suposições que você fez
Shawn C.