Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

คำสั่ง orderby ใน C#: เรียงลำดับข้อมูลด้วย LINQ Query Syntax

คำสั่ง 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 (,) คั่นระหว่างเกณฑ์การเรียง