カテゴリ: C# 更新日: 2026/01/24

C#のLINQでOrderByを使った並び替えを完全ガイド!初心者でもわかるソート方法

C#のLINQでOrderByを使った並び替えをやさしく解説
C#のLINQでOrderByを使った並び替えをやさしく解説

先生と生徒の会話形式で理解しよう

生徒

「LINQでデータを並び替える方法ってありますか?」

先生

「はい、LINQのOrderByメソッドを使えば、簡単にデータを並び替えることができますよ。」

生徒

「どうやって使うんですか?」

先生

「それでは、基本的な使い方から見ていきましょう!」

1. OrderByとは?

1. OrderByとは?
1. OrderByとは?

C#のLINQにあるOrderByは、データを昇順に並び替えるためのメソッドです。昇順とは、小さい値から大きい値へ、またはあいうえお順のように並べることを指します。例えば、数字なら1、2、3の順番、文字列なら「あ、い、う」の順番に整理されます。

OrderByを使うと、配列やリストなどのコレクションに入っているデータを、指定した条件で簡単に整理できます。プログラムでデータを扱うとき、見やすく並べることはとても大切です。

2. OrderByの基本的な使い方

2. OrderByの基本的な使い方
2. OrderByの基本的な使い方

まずは、数値の配列を並び替える簡単な例を見てみましょう。数値データを小さい順に並べるコードです。


using System;
using System.Linq;

class Program
{
    static void Main()
    {
        int[] numbers = { 5, 2, 8, 1, 9, 3 };
        
        var sortedNumbers = numbers.OrderBy(n => n);
        
        foreach (var num in sortedNumbers)
        {
            Console.WriteLine(num);
        }
    }
}

実行結果は次のようになります。


1
2
3
5
8
9

このコードでは、バラバラに並んでいた数字が小さい順にきれいに整理されました。OrderBy(n => n)という部分が並び替えの指示を出している箇所です。

3. OrderByの書き方を詳しく解説

3. OrderByの書き方を詳しく解説
3. OrderByの書き方を詳しく解説

OrderByメソッドは、並び替えの基準を指定する必要があります。基本的な書き方は次の通りです。


var 結果 = データ.OrderBy(要素 => 並び替えの基準);

ここで使われている=>という記号は、ラムダ式と呼ばれるものです。ラムダ式は、簡単に言うと「このデータをどう処理するか」を短く書く方法です。n => nは「各要素nをそのまま使って並び替える」という意味になります。

数値の場合は数値の大きさで、文字列の場合はあいうえお順やアルファベット順で自動的に並び替えられます。

4. 文字列をOrderByで並び替える

4. 文字列をOrderByで並び替える
4. 文字列をOrderByで並び替える

次は、文字列のリストを五十音順に並び替えてみましょう。名前のリストを整理する例です。


using System;
using System.Linq;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<string> fruits = new List<string> { "りんご", "バナナ", "みかん", "いちご" };
        
        var sortedFruits = fruits.OrderBy(f => f);
        
        foreach (var fruit in sortedFruits)
        {
            Console.WriteLine(fruit);
        }
    }
}

実行結果は次のようになります。


いちご
バナナ
みかん
りんご

文字列の場合も、OrderByを使うだけで自動的に五十音順に整理されます。カタカナやひらがなが混ざっていても、きちんと並び替えてくれます。

5. OrderByDescendingで降順に並び替える

5. OrderByDescendingで降順に並び替える
5. OrderByDescendingで降順に並び替える

今までは小さい順に並べてきましたが、逆に大きい順に並べたい場合もあります。そんなときはOrderByDescendingメソッドを使います。Descendingは「降順」という意味で、大きい値から小さい値へと並べることを指します。


using System;
using System.Linq;

class Program
{
    static void Main()
    {
        int[] scores = { 85, 92, 78, 95, 88 };
        
        var sortedScores = scores.OrderByDescending(s => s);
        
        foreach (var score in sortedScores)
        {
            Console.WriteLine(score);
        }
    }
}

実行結果は次のようになります。


95
92
88
85
78

テストの点数などは、高い順に見たいことが多いですよね。そういった場合にOrderByDescendingが便利です。

6. オブジェクトのプロパティで並び替える

6. オブジェクトのプロパティで並び替える
6. オブジェクトのプロパティで並び替える

実際のプログラムでは、単純な数値や文字列だけでなく、複数の情報を持ったオブジェクトを扱うことが多いです。例えば、商品の情報には名前と価格があります。こういったオブジェクトも、特定のプロパティを基準に並び替えることができます。


using System;
using System.Linq;
using System.Collections.Generic;

class Product
{
    public string Name { get; set; }
    public int Price { get; set; }
}

class Program
{
    static void Main()
    {
        List<Product> products = new List<Product>
        {
            new Product { Name = "ノート", Price = 150 },
            new Product { Name = "ペン", Price = 100 },
            new Product { Name = "消しゴム", Price = 80 }
        };
        
        var sortedProducts = products.OrderBy(p => p.Price);
        
        foreach (var product in sortedProducts)
        {
            Console.WriteLine($"{product.Name}: {product.Price}円");
        }
    }
}

実行結果は次のようになります。


消しゴム: 80円
ペン: 100円
ノート: 150円

この例では、OrderBy(p => p.Price)と書くことで、価格の安い順に商品を並び替えています。p.Priceという部分が「価格プロパティを基準にする」という指示になっています。

7. ThenByで複数の条件で並び替える

7. ThenByで複数の条件で並び替える
7. ThenByで複数の条件で並び替える

同じ値が複数ある場合、さらに別の条件で並び替えたいことがあります。例えば、価格が同じ商品があったら、名前順に並べるといった具合です。そんなときはThenByメソッドを使います。


using System;
using System.Linq;
using System.Collections.Generic;

class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main()
    {
        List<Student> students = new List<Student>
        {
            new Student { Name = "田中", Age = 20 },
            new Student { Name = "佐藤", Age = 20 },
            new Student { Name = "鈴木", Age = 19 }
        };
        
        var sortedStudents = students.OrderBy(s => s.Age).ThenBy(s => s.Name);
        
        foreach (var student in sortedStudents)
        {
            Console.WriteLine($"{student.Name}: {student.Age}歳");
        }
    }
}

実行結果は次のようになります。


鈴木: 19歳
佐藤: 20歳
田中: 20歳

まず年齢で並び替えられ、同じ年齢の場合は名前順になっています。このように、OrderByとThenByを組み合わせることで、より細かい並び替えが可能になります。

8. ToListやToArrayで結果を保存する

8. ToListやToArrayで結果を保存する
8. ToListやToArrayで結果を保存する

OrderByの結果は、そのままでは一時的なものです。並び替えた結果を後で何度も使いたい場合は、ToList()ToArray()を使ってリストや配列に変換しておくと便利です。


using System;
using System.Linq;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        int[] numbers = { 7, 3, 9, 1, 5 };
        
        List<int> sortedList = numbers.OrderBy(n => n).ToList();
        
        Console.WriteLine("並び替え後のリスト:");
        foreach (var num in sortedList)
        {
            Console.WriteLine(num);
        }
    }
}

ToList()を使うことで、並び替えた結果がリストとして保存され、何度でも使えるようになります。プログラムの中で繰り返し参照する場合は、この方法を使いましょう。

カテゴリの一覧へ
新着記事
New1
C#
C#のメモリ管理とガーベジコレクションの基礎を理解しよう
New2
C#
C#の参照型と値型の違いを初心者向けにやさしく解説!
New3
C#
C#のクエリ式とメソッド式の書き換え方を完全ガイド!LINQの2つの書き方をマスター
New4
C#
C#の戻り値にタプルを使う方法!複数の値を返すテクニック
人気記事
No.1
Java&Spring記事人気No1
C#
C#で文字列が数値か判定する方法を解説!char.IsDigitやTryParseの基本
No.2
Java&Spring記事人気No2
C#
C#のLINQでOrderByを使った並び替えを完全ガイド!初心者でもわかるソート方法
No.3
Java&Spring記事人気No3
C#
C#のrefとoutキーワードとは?引数の参照渡しを理解しよう
No.4
Java&Spring記事人気No4
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.5
Java&Spring記事人気No5
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.6
Java&Spring記事人気No6
C#
C#の引数と戻り値の基本!値を受け渡し・返す仕組みを理解しよう
No.7
Java&Spring記事人気No7
C#
C#のラムダ式の書き方と構文を初心者向けに完全解説
No.8
Java&Spring記事人気No8
C#
C#のLINQでFirstとFirstOrDefaultの違いと使い方を完全解説!初心者向けガイド