ฉันจะได้รับรายชื่อที่แตกต่างกันตามลำดับจาก DataTable โดยใช้ LINQ ได้อย่างไร


104

ฉันมีDataTableกับNameคอลัมน์ ฉันต้องการสร้างชุดชื่อเฉพาะที่เรียงตามตัวอักษร แบบสอบถามต่อไปนี้ละเว้นลำดับตามอนุประโยค

var names =
    (from DataRow dr in dataTable.Rows
    orderby (string)dr["Name"]
    select (string)dr["Name"]).Distinct();

เหตุใดจึงorderbyไม่ถูกบังคับใช้?

คำตอบ:


37

เพื่อให้สามารถอ่านและบำรุงรักษาได้มากขึ้นคุณยังสามารถแบ่งออกเป็นคำสั่ง LINQ ได้หลายรายการ

  1. ขั้นแรกให้เลือกข้อมูลของคุณในรายการใหม่เรียกว่าx1ทำการฉายภาพหากต้องการ
  2. ถัดไปสร้างรายการที่แตกต่างจากการx1เข้าx2ใช้สิ่งที่แตกต่างที่คุณต้องการ
  3. สุดท้ายสร้างรายการเรียงลำดับจากx2ลงในx3เรียงตามสิ่งที่คุณต้องการ

55

ปัญหาคือตัวดำเนินการที่แตกต่างไม่ได้ให้สิทธิ์ว่าจะคงลำดับค่าเดิมไว้

ดังนั้นแบบสอบถามของคุณจะต้องทำงานเช่นนี้

var names = (from DataRow dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy( name => name );



3

ลองทำดังต่อไปนี้

var names = (from dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy(name => name);

สิ่งนี้ควรใช้กับสิ่งที่คุณต้องการ


2

ถึงนามธรรม: คำตอบทั้งหมดมีบางอย่างที่เหมือนกัน

OrderBy ต้องเป็นการดำเนินการขั้นสุดท้าย


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