【C#】LINQのGroupByメソッドについて、その使い方を解説

LINQの便利な機能の一つであるGroupBy メソッドは、データを特定の条件に基づいてグループ化し、効率的なデータ集計や分類を可能にします。特に、大量のデータを扱う際に、このメソッドを活用することで、必要な情報を整理して素早く取り出すことができます。

本記事では、GrouByメソッドの基本的な使い方から、複数条件でのグループ化までの使用例を解説していきます。データ処理の効率化に役立つこのメソッドをマスターし、実際の開発に活かしていきましょう。

GroupByメソッドの基本的な使い方

GroupBy メソッドの基本的な使い方は、コレクション内の要素を指定したキーに基づいてグループ化することです。一般的には、以下のように使用します。

var grouped = collection.GroupBy(item => item.Key);

この構文では、item.Key に指定されたプロパティや式をもとに、コレクションがグループ化されます。たとえば、商品のリストをカテゴリーごとにグループ化する際には、item.Category をキーに指定します。

より実践的な例として、Product というクラスのリストを、Category というプロパティでグループ化する例を見ていきましょう。

var products = new List<Product>
{
    new Product { Name = "Apple", Category = "Fruits" },
    new Product { Name = "Carrot", Category = "Vegetables" },
    new Product { Name = "Banana", Category = "Fruits" }
};

var groupedProducts = products.GroupBy(p => p.Category);

foreach (var group in groupedProducts)
{
    Console.WriteLine($"Category: {group.Key}");
    foreach (var product in group)
    {
        Console.WriteLine($" - {product.Name}");
    }
}

上記のコードを実行すると、次のように商品がカテゴリーごとにグループ化されて表示されます。

Category: Fruits
 - Apple
 - Banana
Category: Vegetables
 - Carrot

このように、GroupBy メソッドを使うと、指定したキーに基づいて要素をグループ化し、各グループ内の要素に対して処理を行うことが可能です。

複数条件でのグループ化

GroupBy メソッドでは、1つのキーだけでなく、複数の条件を使ってグループ化することも可能です。例えば、ユーザデータを「年齢」と「性別」でグループ化したい場合には、匿名型を使用して複数のキーを指定できます。これにより、より細かい分類が可能となります。

var groupedUsers = users.GroupBy(u => new { u.Age, u.Gender });

この構文を使用することで、ユーザを年齢と性別の組み合わせでグループ化できます。

より実践的な例として、ユーザのリストを「年齢」「性別」でグループ化し、それぞれのグループごとにユーザ名を出力するコードを見てみましょう。

var users = new List<User>
{
    new User { Name = "Alice", Age = 25, Gender = "Female" },
    new User { Name = "Bob", Age = 30, Gender = "Male" },
    new User { Name = "Cathy", Age = 25, Gender = "Female" },
    new User { Name = "David", Age = 30, Gender = "Male" }
};

var groupedUsers = users.GroupBy(u => new { u.Age, u.Gender });

foreach (var group in groupedUsers)
{
    Console.WriteLine($"Age: {group.Key.Age}, Gender: {group.Key.Gender}");
    foreach (var user in group)
    {
        Console.WriteLine($" - {user.Name}");
    }
}

上記コードを実行すると、次のように年齢と性別でグループ化されたユーザが表示されます。

Age: 25, Gender: Female
 - Alice
 - Cathy
Age: 30, Gender: Male
 - Bob
 - David

複数条件を使ったグループ化により、データの詳細なセグメント化が可能となり、特定のグループに対する高度な処理や分析が実現できます。

まとめ

GroupBy メソッドは、データを特定の条件に基づいてグループ化し、効率的な集計や分析を行うために非常に役立つメソッドです。基本的な使い方から、複数のキーによるグループ化、さらにSelectメソッドなどの他のLINQメソッドとの組み合わせなど、多様な場面で柔軟に活用できます。

特に、大量のデータセットに対して、グループごとの処理や集計を行う場合には欠かせない機能になってきます。

今回紹介した方法を参考に、実際のプロジェクトでGroupBy メソッドを活用し、データ処理をより効率的に進めてください。

コメント