C #: ¿Cómo convertir una lista de objetos en una lista de una sola propiedad de ese objeto?


104

Di que tengo:

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

Y el objeto persona tiene propiedades como Nombre, Apellido y Sexo.

¿Cómo puedo convertir esto en una lista de propiedades del objeto Person? Por ejemplo, a una lista de nombres.

IList<string> firstNames = ???

Respuestas:


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

Y con clasificar

List<string> orderedNames = people.Select(person => person.FirstName).OrderBy(name => name).ToList();

Gracias. Además, ¿cómo lo ordenaría alfabéticamente por nombre?
Usuario

Lista <cadena> firstNames = people.Select (person => person.FirstName) .ToList (). Sort (); Esto ordenará usando la clasificación alfabética predeterminada de cadena.
Paul Williams

¡Sort () no admite una interfaz fluida! Llame a firstNames.Sort () por separado
Dario

var list = from person in people orderby person.FirstName seleccione person.FirstName;
ConsultUtah

una de las mejores respuestas sobre SO! (podría ser mi ignorancia) :)
nawfal

5
IList<string> firstNames = (from person in people select person.FirstName).ToList();

O

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

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

7
Usar una expresión de consulta en este caso es una exageración, en mi opinión. La notación de puntos tiene menos pelusa si solo tiene una operación simple.
Jon Skeet

1
Es cierto, pero la pregunta era "¿Cómo se puede hacer esto?" ... no "¿Cómo se puede hacer esto con la menor cantidad de pelusa?". Sin intención de faltarle el respeto, Jon. (Por favor, no me golpees).
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();

Gracias por este fragmento de código, que puede proporcionar una ayuda limitada a corto plazo. Una explicación adecuada mejoraría enormemente su valor a largo plazo al mostrar por qué es una buena solución al problema y lo haría más útil para futuros lectores con otras preguntas similares. Edite su respuesta para agregar alguna explicación, incluidas las suposiciones que hizo
Shawn C.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.