C #: จะแปลงรายการวัตถุเป็นรายการคุณสมบัติเดียวของวัตถุนั้นได้อย่างไร


108

บอกว่าฉันมี:

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

และวัตถุบุคคลมีคุณสมบัติเช่น FirstName, LastName และ Gender

ฉันจะแปลงเป็นรายการคุณสมบัติของวัตถุบุคคลได้อย่างไร ตัวอย่างเช่นรายการชื่อ

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) .oList (). Sort (); สิ่งนี้จะจัดเรียงโดยใช้การเรียงลำดับตามตัวอักษรเริ่มต้นของสตริง
Paul Williams

Sort () ไม่รองรับอินเทอร์เฟซที่คล่องแคล่ว! โทรหา firstNames.Sort () แยกกัน
Dario

var list = from person in people orderby person. FirstName เลือก person.FirstName;
ConsultUtah

หนึ่งในคำตอบที่ดีที่สุดของ SO! (อาจเป็นความไม่รู้ของฉัน) :)
nawfal


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

7
การใช้นิพจน์แบบสอบถามในกรณีนี้คือการใช้งานมากเกินไป IMO สัญกรณ์ดอทมีความฟูน้อยกว่าหากคุณมีการใช้งานง่ายๆเพียงครั้งเดียว
Jon Skeet

1
จริงอยู่ แต่คำถามคือ "ทำได้อย่างไร" ... ไม่ใช่ "วิธีนี้จะทำได้อย่างไรโดยให้ฟูน้อยที่สุด" ไม่มีเจตนาดูหมิ่นจอน (โปรดอย่าตีฉัน)
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();

ขอขอบคุณสำหรับข้อมูลโค้ดนี้ซึ่งอาจให้ความช่วยเหลือระยะสั้นที่ จำกัด คำอธิบายที่เหมาะสมจะช่วยเพิ่มมูลค่าในระยะยาวได้อย่างมากโดยแสดงให้เห็นว่าเหตุใดจึงเป็นวิธีแก้ปัญหาที่ดีและจะทำให้มีประโยชน์มากขึ้นสำหรับผู้อ่านในอนาคตด้วยคำถามอื่น ๆ ที่คล้ายคลึงกัน โปรดแก้ไขคำตอบของคุณเพื่อเพิ่มคำอธิบายรวมถึงสมมติฐานที่คุณตั้งไว้
Shawn C.

-2

สิ่งนี้จะเปลี่ยนเป็นรายการ:

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

สิ่งนี้จะส่งคืนหนึ่ง (อันแรก):

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

คำถามได้รับคำตอบแล้วอย่าคัดลอกคำตอบอื่น
CrudaLilium
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.