คำสั่ง orderby ใน LINQ Query Syntax ใช้สำหรับเรียงลำดับข้อมูลในลำดับ (sequence) ตามค่าของฟิลด์หรือคุณสมบัติที่กำหนด รองรับการเรียงจากน้อยไปมาก (ascending) และมากไปน้อย (descending)
รูปแบบไวยากรณ์
var query = from item in collection
orderby item.Property [ascending|descending]
select item;
โค้ดตัวอย่างสมบูรณ์
using System;
using System.Collections.Generic;
using System.Linq;
class Demo
{
static void Main()
{
List vehicles = new List
{
"truck", "bus", "bicycle", "motorbike"
};
Console.WriteLine("ข้อมูลต้นฉบับ:");
foreach (var v in vehicles) Console.WriteLine($" {v}");
// เรียงตามความยาวสตริง (น้อยไปมาก)
var ascending = from v in vehicles
orderby v.Length ascending
select v;
Console.WriteLine("\nเรียงตามความยาว (น้อย → มาก):");
foreach (var v in ascending) Console.WriteLine($" {v} ({v.Length} ตัวอักษร)");
// เรียงตามความยาวสตริง (มากไปน้อย)
var descending = from v in vehicles
orderby v.Length descending
select v;
Console.WriteLine("\nเรียงตามความยาว (มาก → น้อย):");
foreach (var v in descending) Console.WriteLine($" {v} ({v.Length} ตัวอักษร)");
// เรียงหลายระดับ (ThenBy)
var multiLevel = from v in vehicles
orderby v.Length ascending, v ascending
select v;
Console.WriteLine("\nเรียงความยาวก่อน แล้วค่อยเรียงตัวอักษร:");
foreach (var v in multiLevel) Console.WriteLine($" {v}");
}
}
ผลลัพธ์
ข้อมูลต้นฉบับ:
truck
bus
bicycle
motorbike
เรียงตามความยาว (น้อย → มาก):
bus (3)
truck (5)
bicycle (7)
motorbike (9)
เรียงตามความยาว (มาก → น้อย):
motorbike (9)
bicycle (7)
truck (5)
bus (3)
เรียงความยาวก่อน แล้วค่อยเรียงตัวอักษร:
bus (3)
truck (5)
bicycle (7)
motorbike (9)
Method Syntax (Lambda) - ทางเลือกอื่น
// เทียบเท่ากับ orderby ascending
var asc = vehicles.OrderBy(v => v.Length);
// เทียบเท่ากับ orderby descending
var desc = vehicles.OrderByDescending(v => v.Length);
// เรียงหลายระดับ
var multi = vehicles.OrderBy(v => v.Length).ThenBy(v => v);
การเรียงลำดับแบบกำหนดเอง (Custom Comparer)
// เรียงตามตัวอักษรสุดท้าย
var custom = vehicles.OrderBy(v => v.Last());
// เรียงแบบไม่สนใจตัวพิมพ์เล็ก/ใหญ่
var caseInsensitive = vehicles.OrderBy(v => v, StringComparer.OrdinalIgnoreCase);
หมายเหตุสำคัญ
ascendingเป็นค่าเริ่มต้น (เขียนหรือไม่เขียนก็ได้)- การเรียงลำดับเป็น Stable Sort - รักษาลำดับเดิมของค่าที่เท่ากัน
- ใช้
ThenBy/ThenByDescendingสำหรับการเรียงหลายระดับใน Method Syntax - ใน Query Syntax ใช้ comma (,) คั่นระหว่างเกณฑ์การเรียง