C #: come convertire un elenco di oggetti in un elenco di una singola proprietà di quell'oggetto?


104

Di 'che ho:

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

E l'oggetto persona ha proprietà come FirstName, LastName e Gender.

Come posso convertirlo in un elenco di proprietà dell'oggetto Person. Ad esempio, a un elenco di nomi.

IList<string> firstNames = ???

Risposte:


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

E con l'ordinamento

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

Grazie. Inoltre, come lo ordino alfabeticamente in base al nome?
Utente

List <string> firstNames = people.Select (person => person.FirstName) .ToList (). Sort (); Questo ordinerà utilizzando l'ordinamento alfabetico predefinito della stringa.
Paul Williams,

Sort () non supporta un'interfaccia fluente! Chiama separatamente firstNames.Sort ()
Dario

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

una delle migliori risposte su SO! (potrebbe essere la mia ignoranza) :)
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
L'utilizzo di un'espressione di query in questo caso è eccessivo, IMO. La notazione del punto ha meno confusione se hai solo una semplice operazione.
Jon Skeet,

1
Vero, ma la domanda era "Come si può fare" ... non "Come si può fare con la minima quantità di lanugine". Nessuna mancanza di rispetto, Jon. (Per favore, non colpirmi).
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();

Grazie per questo snippet di codice, che potrebbe fornire un aiuto limitato a breve termine. Una spiegazione adeguata migliorerebbe notevolmente il suo valore a lungo termine mostrando perché questa è una buona soluzione al problema e la renderebbe più utile ai futuri lettori con altre domande simili. Modifica la tua risposta per aggiungere qualche spiegazione, comprese le ipotesi che hai fatto
Shawn C.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.