コレクション LINQ

[C#] LINQラムダ式でグルーピングを行う(.GroupBy)

2021年7月30日

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;」の宣言が必要です。
  • リストに要素が存在しない場合でも例外は発生しません。

関連記事

-コレクション, LINQ