LINQラムダ式でグルーピングを行うには、.GroupBy() を使用します。
サンプル
例1)List<int>型の場合
using System.Collections.Generic;
using System.Linq;
//int型のList
List<int> list = new List<int>(){1, 2, 3, 2, 3, 4, 5};
//要素をグルーピングする
var result = list.GroupBy(x => x).ToList();
結果
{1, 2, 3, 4, 5}
要素の重複を取り除きたいだけであれば、.Distinct()でもOKです。
→ [C#] LINQラムダ式で重複データを取り除く(.Distinct)
例2)データクラスListの場合
using System.Collections.Generic;
using System.Linq;
//Studentクラス
class Student{
public string Name { get; set; }
public string Subject { get; set; }
public int Score { get; set; }
}
//StudentクラスのList
var list = new List<Student>()
{
new Student(){Name="鈴木", Subject="国語", Score=10},
new Student(){Name="鈴木", Subject="算数", Score=20},
new Student(){Name="高橋", Subject="国語", Score=30},
new Student(){Name="高橋", Subject="算数", Score=40},
new Student(){Name="伊藤", Subject="国語", Score=50},
new Student(){Name="伊藤", Subject="算数", Score=60}
};
//Student.NameでグルーピングしてScoreの合計値を求める
var result = list.GroupBy(x => x.Name)
.Select(x => new {Name = x.Key, Score = x.Sum(y => y.Score)});
結果
[鈴木, 30]
[高橋, 70]
[伊藤, 110]
備考
- LINQを使用するには、「using System.Linq;」の宣言が必要です。
- リストに要素が存在しない場合でも例外は発生しません。