C #: Как преобразовать список объектов в список одного свойства этого объекта?


108

Скажем, у меня есть:

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

А объект person имеет такие свойства, как FirstName, LastName и Gender.

Как я могу преобразовать это в список свойств объекта Person. Например, к списку имен.

IList<string> firstNames = ???

Ответы:


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

И с сортировкой

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

Спасибо. Кроме того, как мне отсортировать это в алфавитном порядке по имени?
Пользователь,

Список <string> firstNames = people.Select (person => person.FirstName) .ToList (). Sort (); Это будет отсортировано с использованием алфавитной сортировки строк по умолчанию.
Пол Уильямс,

Sort () не поддерживает свободный интерфейс! Вызовите firstNames.Sort () отдельно
Дарио

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

один из лучших ответов на SO! (может быть, мое незнание) :)
nawfal 09

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

Или

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

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

7
Использование выражения запроса в этом случае является излишним, ИМО. В точечной нотации будет меньше беспорядка, если у вас будет всего одна простая операция.
Джон Скит,

1
Верно, но вопрос был «Как это можно сделать» ... а не «Как это можно сделать с наименьшим количеством пуха». Никакого неуважения, Джон. (Пожалуйста, не бей меня).
Дэн Эспарса,

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();

Спасибо за этот фрагмент кода, который может предоставить некоторую краткосрочную помощь. Правильное объяснение значительно повысило бы его ценность в долгосрочной перспективе, показав, почему это хорошее решение проблемы, и сделало бы его более полезным для будущих читателей, задающих другие похожие вопросы. Пожалуйста, отредактируйте свой ответ, чтобы добавить некоторые пояснения, в том числе сделанные вами предположения
Шон С.

-2

Это превратит его в список:

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

Это вернет один (первый):

var firstname = people.select(e => e.firstname).FirstOrDefault();

На вопрос уже дан ответ, не копируйте чужие ответы.
CrudaLilium
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.