2018.4.24
2020.1.7

Linqの使い方(条件や件数での絞込み、複数のキーでソート)

LinqでModelデータの配列から、条件や件数での絞り込み、複数のキーの昇順または降順でソートしたデータを取得する方法になります。

プロジェクトはコンソールアプリケーションで作成したものを使っていて、必要のない部分は省略しています。

コード

5人中、スコアが70以上で、スコアの高い順と名前の昇順でソートしたデータから、上位3人を絞り込むコードは以下の通りです。


using System.Linq;

public static void Main(string[] args)
{
    var data = new[] {
        new ExampleItem { Id = 1, Name = "bbb", Score = 90 },
        new ExampleItem { Id = 2, Name = "ccc", Score = 60 },
        new ExampleItem { Id = 3, Name = "aaa", Score = 70 },
        new ExampleItem { Id = 4, Name = "eee", Score = 80 },
        new ExampleItem { Id = 5, Name = "ddd", Score = 80 }
    };

    var res = data.Where(x => x.Score >= 70)
        .OrderByDescending(x => x.Score)
        .ThenBy(x => x.Name)
        .Take(3)
        .ToList();

    res.ForEach(x => Console.WriteLine(x.Id + " " + x.Name + " " + x.Score));
    // 1 bbb 90
    // 5 ddd 80
    // 4 eee 80
}

public class ExampleItem 
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Score { get; set; }
}

「ThenBy」が昇順、「OrderByDescending」で降順を指定。

上位?件の取得には「Take」を使い、開始位置を指定したい場合は「Skip」を使用。

Linqを使い初めてそこそこ経ちますが、がっつり組んだことがあまりないので、こういった処理が簡単に書けると、未だに感動してしまいます。

C#】関連記事