คุณควรแน่นอนใช้ThenBy
มากกว่าหลายOrderBy
สาย
ฉันขอแนะนำสิ่งนี้:
tmp = invoices.InvoiceCollection
.OrderBy(o => o.InvoiceOwner.LastName)
.ThenBy(o => o.InvoiceOwner.FirstName)
.ThenBy(o => o.InvoiceID);
สังเกตว่าคุณจะใช้ชื่อเดียวกันได้อย่างไรในแต่ละครั้ง นอกจากนี้ยังเทียบเท่ากับ:
tmp = from o in invoices.InvoiceCollection
orderby o.InvoiceOwner.LastName,
o.InvoiceOwner.FirstName,
o.InvoiceID
select o;
ถ้าคุณเรียกOrderBy
หลายครั้งก็จะมีประสิทธิภาพในการสั่งซื้อลำดับสมบูรณ์ สามครั้ง ... ดังนั้นสายสุดท้ายจะได้อย่างมีประสิทธิภาพเป็นที่โดดเด่นอย่างใดอย่างหนึ่ง คุณสามารถเขียน (ใน LINQ ถึง Objects)
foo.OrderBy(x).OrderBy(y).OrderBy(z)
ซึ่งจะเทียบเท่ากับ
foo.OrderBy(z).ThenBy(y).ThenBy(x)
เนื่องจากลำดับการจัดเรียงมีเสถียรภาพ แต่คุณไม่ควร:
- มันยากที่จะอ่าน
- ทำงานได้ไม่ดี (เพราะเรียงลำดับใหม่ทั้งหมด)
- อาจใช้ไม่ได้กับผู้ให้บริการรายอื่น (เช่น LINQ ถึง SQL)
- โดยพื้นฐานแล้วไม่
OrderBy
ได้ออกแบบมาให้ใช้งานได้อย่างไร
ประเด็นOrderBy
คือการจัดเตรียมการฉายภาพการสั่งซื้อที่ "สำคัญที่สุด" จากนั้นใช้ThenBy
(ซ้ำ ๆ ) เพื่อระบุการคาดการณ์ลำดับรองระดับอุดมศึกษาและอื่น ๆ
ลองคิดอย่างนี้อย่างมีประสิทธิภาพ: OrderBy(...).ThenBy(...).ThenBy(...)
ช่วยให้คุณสร้างการเปรียบเทียบแบบผสมเดียวสำหรับวัตถุสองชิ้นใด ๆ จากนั้นเรียงลำดับตามลำดับเมื่อใช้การเปรียบเทียบแบบผสมนั้น นั่นคือสิ่งที่คุณต้องการอย่างแน่นอน