興味の源泉

自分が興味を起こせるようなネタを雑多に書き綴るブログ

【LINQ】OrderByとThenByを使ったソート【C#】

f:id:nanami_yamato:20190516011617p:plain

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は使い勝手が良いのでどんどん使っていきたいですね。