コレクション LINQ

[C#] LINQラムダ式でソートを行う(.OrderBy、.OrderByDescending)

2021年6月26日

LINQラムダ式でソートを行うには
.OrderBy().OrderByDescending()を使用します。

サンプル(基本データ型リストの場合)

例1)List<int>を昇順でソートする

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

//intのListを生成
List<int> list = new List<int>(){7, 3, 9, 1, 5};

//昇順でソートする
var listSorted = list.OrderBy(x => x).ToArray();

結果

1
3
5
7
9

例2)List<int>を降順でソートする

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

//intのListを生成
List<int> list = new List<int>(){7, 3, 9, 1, 5};

//降順でソートする
var listSorted = list.OrderByDescending(x => x).ToArray();

結果

9
7
5
3
1

サンプル(データクラスリストの場合)

例として、以下のデータクラスリストを使用します。

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

//データクラス(Shainクラス)
class Shain{
  public int Id { get; set; }
  public string Name { get; set; }
  public string Busho { get; set; }
}

var list = new List<Shain>();
list.Add(new Shain() { Id = 5, Name = "松本", Busho = "営業部" });
list.Add(new Shain() { Id = 1, Name = "田中", Busho = "営業部" });
list.Add(new Shain() { Id = 3, Name = "高橋", Busho = "総務部" });
list.Add(new Shain() { Id = 2, Name = "鈴木", Busho = "開発部" });
list.Add(new Shain() { Id = 4, Name = "伊藤", Busho = "開発部" });

例3)Shain.Idの昇順でソートする

using System.Linq;

//Shain.Idの昇順でソートする
var listSorted = list.OrderBy(x => x.Id).ToArray();

結果

[1 田中 営業部]
[2 鈴木 開発部]
[3 高橋 総務部]
[4 伊藤 開発部]
[5 松本 営業部]

例4)Shain.Idの降順でソートする

using System.Linq;

//Shain.Idの降順でソートする
var listSorted = list.OrderByDescending(x => x.Id).ToArray();

結果

[5 松本 営業部]
[4 伊藤 開発部]
[3 高橋 総務部]
[2 鈴木 開発部]
[1 田中 営業部]

例5)Shain.Bushoの昇順、Shain.Idの昇順でソートする

using System.Linq;

//Shain.Idの昇順でソートする
var listSorted
 = list.OrderBy(x => x.Busho).ThenBy(x => x.Id).ToArray();

結果

[1 田中 営業部]
[5 松本 営業部]
[2 鈴木 開発部]
[4 伊藤 開発部]
[3 高橋 総務部]

例6)Shain.Bushoの昇順、Shain.Idの降順でソートする

using System.Linq;

//Shain.Idの昇順でソートする
var listSorted
 = list.OrderBy(x => x.Busho).ThenByDescending(x => x.Id).ToArray();

結果

[5 松本 営業部]
[1 田中 営業部]
[4 伊藤 開発部]
[2 鈴木 開発部]
[3 高橋 総務部]

備考

  • 昇順は.OrderBy、降順は.OrderByDescendingを使用します。
  • 2番め以降の条件は、昇順は.ThenBy、降順は.ThenByDescendingを使用します。

-コレクション, LINQ