C #: Comment convertir une liste d'objets en une liste d'une seule propriété de cet objet?

105

Dis que j'ai:

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

Et l'objet personne a des propriétés telles que FirstName, LastName et Gender.

Comment puis-je convertir cela en une liste de propriétés de l'objet Person. Par exemple, à une liste de prénoms.

IList<string> firstNames = ???
Utilisateur
la source

Réponses:

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

Et avec le tri

List<string> orderedNames = people.Select(person => person.FirstName).OrderBy(name => name).ToList();
Dario
la source
Merci. Aussi, comment pourrais-je trier cela par ordre alphabétique par prénom?
Utilisateur le
List <string> firstNames = people.Select (person => person.FirstName) .ToList (). Sort (); Cela triera en utilisant le tri alphabétique par défaut de la chaîne.
Paul Williams
Sort () ne prend pas en charge une interface fluide! Appelez firstNames.Sort () séparément
Dario
var list = from person in people orderby person.FirstName select person.FirstName;
ConsultUtah le
l'une des meilleures réponses sur SO! (pourrait être mon ignorance) :)
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
la source
3
firstNames = (from p in people select p=>p.firstName).ToList();
Grégoire
la source
7
Utiliser une expression de requête dans ce cas est excessif, IMO. La notation par points a moins de peluches si vous n'avez qu'une opération simple.
Jon Skeet le
1
C'est vrai, mais la question était "Comment cela peut-il être fait" ... pas "Comment cela peut-il être fait avec le moins de peluches". Pas de manque de respect, Jon. (S'il vous plaît ne me frappez pas).
Dan Esparza le
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
la source
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
la source
Merci pour cet extrait de code, qui pourrait fournir une aide limitée à court terme. Une explication appropriée améliorerait considérablement sa valeur à long terme en montrant pourquoi c'est une bonne solution au problème et la rendrait plus utile aux futurs lecteurs avec d'autres questions similaires. Veuillez modifier votre réponse pour ajouter des explications, y compris les hypothèses que vous avez faites
Shawn C.