【C#】LINQでグルーピング・集計を行う方法|GroupByと集約関数

【C#】LINQでグルーピング・集計を行う方法|GroupByと集約関数 C#

C# の LINQ を使うと、データをグループ化したり、合計や平均などの集計を簡潔に記述できます。特に GroupBy と組み合わせることで、SQL のような集計処理をコード内で実現できます。本記事では GroupBy の基本から、SumCountAverage などの集約関数の使い方を紹介します。

サンプルデータ

public class Product
{
    public string Category { get; set; } = "";
    public string Name { get; set; } = "";
    public int Price { get; set; }
}

var products = new List<Product>
{
    new Product { Category = "食品", Name = "りんご", Price = 100 },
    new Product { Category = "食品", Name = "パン", Price = 200 },
    new Product { Category = "飲料", Name = "コーヒー", Price = 150 },
    new Product { Category = "飲料", Name = "紅茶", Price = 120 },
    new Product { Category = "雑貨", Name = "ノート", Price = 300 },
};

GroupByの基本

カテゴリごとに商品をグルーピングする例です。

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

foreach (var group in groups)
{
    Console.WriteLine($"カテゴリ: {group.Key}");
    foreach (var item in group)
    {
        Console.WriteLine($"  - {item.Name} ({item.Price}円)");
    }
}

出力例:

カテゴリ: 食品
  - りんご (100円)
  - パン (200円)
カテゴリ: 飲料
  - コーヒー (150円)
  - 紅茶 (120円)
カテゴリ: 雑貨
  - ノート (300円)

GroupByとSumで合計を計算

グループごとの合計金額を計算します。

var categorySums = products
    .GroupBy(p => p.Category)
    .Select(g => new
    {
        Category = g.Key,
        Total = g.Sum(p => p.Price)
    });

foreach (var item in categorySums)
{
    Console.WriteLine($"{item.Category} の合計金額: {item.Total}円");
}

Countで件数を取得

グループごとの件数を取得できます。

var categoryCounts = products
    .GroupBy(p => p.Category)
    .Select(g => new
    {
        Category = g.Key,
        Count = g.Count()
    });

foreach (var item in categoryCounts)
{
    Console.WriteLine($"{item.Category} の商品数: {item.Count}");
}

Averageで平均を計算

グループごとの平均価格を求める例です。

var categoryAverages = products
    .GroupBy(p => p.Category)
    .Select(g => new
    {
        Category = g.Key,
        Average = g.Average(p => p.Price)
    });

foreach (var item in categoryAverages)
{
    Console.WriteLine($"{item.Category} の平均価格: {item.Average:F1}円");
}

まとめ

LINQ の GroupBy と集約関数を組み合わせると、データのグルーピングと集計を簡潔に表現できます。

  • GroupBy … 指定したキーでデータをグループ化
  • Sum … 合計を算出
  • Count … 件数を算出
  • Average … 平均を算出

SQL のような集計処理を C# のコード内で自然に記述できるため、データ処理の効率が大幅に向上します。