【LINQ】OrderByとThenByを使ったソート【C#】
LINQでソートする場合には
OrderByで昇順のソート、OrderByDescendingで降順のソート、
ThenByとThenByDescendingはOrderByでソートしたものをさらにソートしたい場合に使用します。
以下のようなクラスがあったとして
public class PersonTestClass { public string Name { get; private set; } public int Age { get; private set; } public bool IsMan { get; private set; } public PersonTestClass(string _name, int _age, bool _isMan) { Name = _name; Age = _age; IsMan = _isMan; } }
下記データがあった場合
List<PersonTestClass> personList = new List<PersonTestClass>(); personList.Add(new PersonTestClass("bee", 18, true)); personList.Add(new PersonTestClass("dante", 30, true)); personList.Add(new PersonTestClass("alisa", 45, false)); personList.Add(new PersonTestClass("yosiko", 20, false)); personList.Add(new PersonTestClass("nobu", 22, true)); personList.Add(new PersonTestClass("hana", 30, false)); personList.Add(new PersonTestClass("kuro", 30, true));
以下は、Ageで降順ソートしたものをさらにIsManで昇順ソートし、それをNameで降順ソートをするものです。
List<PersonTestClass> orderDataPersonList = personList.OrderByDescending(dt => dt.Age) .ThenBy(dt => dt.IsMan) .ThenByDescending(dt => dt.Name).ToList();
orderDataPersonList の出力結果は以下のようになります。
Name:alisa / Age:45 / IsMan:False Name:hana / Age:30 / IsMan:False Name:kuro / Age:30 / IsMan:True Name:dante / Age:30 / IsMan:True Name:nobu / Age:22 / IsMan:True Name:yosiko / Age:20 / IsMan:False Name:bee / Age:18 / IsMan:True
LINQは使い勝手が良いのでどんどん使っていきたいですね。