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