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を使用します。