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 = ???

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

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

3
firstNames = (from p in people select p=>p.firstName).ToList();

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; }
    }
}

0
using System.Collections.Generic;
using System.Linq;

IList<Person> people = new List<Person>();
IList<string> firstNames = people.Select(person => person.FirstName).ToList();

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.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.