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

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();
Darío
fuente
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();
Jon Sagara
fuente
3
firstNames = (from p in people select p=>p.firstName).ToList();
Gregoire
fuente
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; }
    }
}
Mohd Shahnawaz
fuente
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
fuente
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.