カテゴリ: C# 更新日: 2025/10/06

C#のLINQでグループ化と集計!GroupByとCountを初心者向けに解説

C#のLINQでグループ化・集計(GroupBy・Count)を行う方法
C#のLINQでグループ化・集計(GroupBy・Count)を行う方法

先生と生徒の会話形式で理解しよう

生徒

「C#のLINQでデータをまとめたり数えたりすることはできますか?」

先生

「はい、できますよ。LINQにはGroupByでグループ化、Countで数を数える便利な機能があります。」

生徒

「例えば、同じ種類ごとに分けて集計する、みたいなことですか?」

先生

「そうです!身近な例で言うと、クラスの生徒を『出席番号ごと』や『好きな科目ごと』にまとめて数えるイメージですね。」

1. LINQのGroupByとは?

1. LINQのGroupByとは?
1. LINQのGroupByとは?

C#のLINQにあるGroupByは、データをある条件ごとにまとめるための機能です。例えば、果物のリストがあったときに「種類ごと」に分けることができます。これは、エクセルで同じ項目をグループ化する操作に似ています。

グループ化とは、同じ値を持つデータをひとまとめに整理することです。プログラミング初心者でも直感的に理解しやすい処理です。

2. GroupByの基本的な使い方

2. GroupByの基本的な使い方
2. GroupByの基本的な使い方

では、C#のLINQで果物のリストを種類ごとにグループ化するサンプルコードを見てみましょう。


using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        List<string> fruits = new List<string>
        {
            "りんご", "みかん", "りんご", "バナナ", "みかん", "りんご"
        };

        var grouped = fruits.GroupBy(f => f);

        foreach (var group in grouped)
        {
            Console.WriteLine($"果物の種類: {group.Key}");
            foreach (var item in group)
            {
                Console.WriteLine($"  - {item}");
            }
        }
    }
}

果物の種類: りんご
  - りんご
  - りんご
  - りんご
果物の種類: みかん
  - みかん
  - みかん
果物の種類: バナナ
  - バナナ

この例では、同じ果物がまとめられて出力されます。group.Keyは「グループの名前(ここでは果物の種類)」を表しています。

3. Countでグループごとの数を数える

3. Countでグループごとの数を数える
3. Countでグループごとの数を数える

次に、グループごとに「何個あるか」を数えてみましょう。LINQのCountを使うと、数える処理がとても簡単に書けます。


using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        List<string> fruits = new List<string>
        {
            "りんご", "みかん", "りんご", "バナナ", "みかん", "りんご"
        };

        var grouped = fruits.GroupBy(f => f)
                            .Select(g => new { Name = g.Key, Count = g.Count() });

        foreach (var g in grouped)
        {
            Console.WriteLine($"{g.Name}の数: {g.Count}");
        }
    }
}

りんごの数: 3
みかんの数: 2
バナナの数: 1

このように、GroupByCountを組み合わせると、種類ごとの数を簡単に集計できます。

4. 現実のイメージで理解する

4. 現実のイメージで理解する
4. 現実のイメージで理解する

ここまでの例を現実のイメージで考えてみましょう。たとえば、クラスで「好きなスポーツ」をアンケートしたとします。野球が好きな人が3人、サッカーが好きな人が2人、バスケが1人だった場合、それをC#のLINQで表すと、GroupByで「スポーツごとにまとめ」、Countで「人数を数える」といった処理になります。

つまり、GroupByは仕分け役、Countは人数を数える役と覚えると理解しやすいです。

5. 応用例:商品と在庫数の集計

5. 応用例:商品と在庫数の集計
5. 応用例:商品と在庫数の集計

最後にもう一つ、少し実用的な例を紹介します。商品リストから商品ごとに在庫の数を集計する場合です。


using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    class Product
    {
        public string Name { get; set; }
        public int Quantity { get; set; }
    }

    static void Main()
    {
        var products = new List<Product>
        {
            new Product { Name = "ペン", Quantity = 5 },
            new Product { Name = "ノート", Quantity = 3 },
            new Product { Name = "ペン", Quantity = 2 },
            new Product { Name = "消しゴム", Quantity = 4 }
        };

        var grouped = products.GroupBy(p => p.Name)
                              .Select(g => new { Name = g.Key, Total = g.Sum(p => p.Quantity) });

        foreach (var g in grouped)
        {
            Console.WriteLine($"{g.Name}の合計数: {g.Total}");
        }
    }
}

ペンの合計数: 7
ノートの合計数: 3
消しゴムの合計数: 4

ここではSumも一緒に使っていますが、Countだけでなく合計などの集計にも応用できるのがLINQの強みです。

カテゴリの一覧へ
新着記事
C#で複数ファイルをまとめて操作する方法(foreach・LINQ)をやさしく解説!
C#のインターフェースとは?クラス設計を柔軟にする基本技術
C#のコンストラクタの役割と使い方!オブジェクト初期化の基本
COBOLでデータベース接続を理解しよう!初心者でもわかる基本の考え方
人気記事
No.1
Java&Spring記事人気No1
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.2
Java&Spring記事人気No2
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方
No.3
Java&Spring記事人気No3
C#の数値型をマスターしよう!int・double・decimalの違いと使い方
No.4
Java&Spring記事人気No4
COBOLのCOPY句の使い方を完全ガイド!初心者でもわかる共通部品の再利用方法