C #: Jak przekonwertować listę obiektów na listę pojedynczej właściwości tego obiektu?

108

Powiedz, że mam:

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

Obiekt osoby ma właściwości, takie jak FirstName, LastName i Gender.

Jak mogę przekształcić to w listę właściwości obiektu Person. Na przykład do listy imion.

IList<string> firstNames = ???
Użytkownik
źródło

Odpowiedzi:

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

I z sortowaniem

List<string> orderedNames = people.Select(person => person.FirstName).OrderBy(name => name).ToList();
Dario
źródło
Dzięki. Poza tym, jak uporządkowałbym to alfabetycznie według imienia?
Użytkownik
List <string> firstNames = people.Select (person => person.FirstName) .ToList (). Sort (); Spowoduje to posortowanie przy użyciu domyślnego alfabetycznego sortowania ciągu.
Paul Williams
Sort () nie obsługuje płynnego interfejsu! Zadzwoń do firstNames.Sort () oddzielnie
Dario
var list = od osoby w osobach w kolejności według person.FirstName wybierz person.FirstName;
ConsultUtah,
jedna z najlepszych odpowiedzi na SO! (to może być moja ignorancja) :)
nawfal
5
IList<string> firstNames = (from person in people select person.FirstName).ToList();

Lub

IList<string> firstNames = people.Select(person => person.FirstName).ToList();
Jon Sagara
źródło
3
firstNames = (from p in people select p=>p.firstName).ToList();
Gregoire
źródło
7
Używanie wyrażenia zapytania w tym przypadku jest przesadą, IMO. Notacja kropkowa ma mniej kłaczków, jeśli masz tylko jedną prostą operację.
Jon Skeet
1
To prawda, ale pytanie brzmiało: „Jak to zrobić” ... a nie „Jak to zrobić przy najmniejszej ilości kłaczków”. Bez braku szacunku, Jon. (Proszę, nie bij mnie).
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
źródło
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
źródło
Dziękujemy za ten fragment kodu, który może zapewnić ograniczoną krótkoterminową pomoc. Właściwe wyjaśnienie znacznie poprawiłoby jego długoterminową wartość, pokazując, dlaczego jest to dobre rozwiązanie problemu i uczyniłoby go bardziej użytecznym dla przyszłych czytelników z innymi, podobnymi pytaniami. Zmień swoją odpowiedź, dodając wyjaśnienie, w tym przyjęte przez siebie założenia
Shawn C.
-2

Spowoduje to wyświetlenie listy:

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

To zwróci jeden (pierwszy):

var firstname = people.select(e => e.firstname).FirstOrDefault();
Tayo Oyetunji
źródło
Na pytanie już udzielono odpowiedzi, nie kopiuj odpowiedzi innych osób.
CrudaLilium