記事詳細


投稿日
2025年10月25日22時08分
タイトル

関連するテーブルからデータを取得(グループ化)

内容

このコードは、ASP.NET Core MVCでデータベースから情報を取得し、特定の形式に加工するためのLINQクエリです。それぞれの部分を分解して説明します。

コードの意味

Csharp
var xData = _context.Payment .Include(p => p.PayCategory) .GroupBy(x => x.PayCategory.CategoryName) .Select(g => new { labels = g.Key, // DistinctなName data = g.Sum(x => x.Amount) // Amountの合計 });
  1. _context.Payment:

    • データベースのPaymentテーブルを参照しています。
    • _contextは通常、Entity Framework CoreのDbContextクラスのインスタンスで、データベース操作を行うためのエントリーポイントです。
  2. .Include(p => p.PayCategory):

    • Paymentテーブルと関連するPayCategoryテーブルをEager Loadingで読み込んでいます。
    • これにより、PaymentエンティティのPayCategoryプロパティが同時に取得されます。
  3. .GroupBy(x => x.PayCategory.CategoryName):

    • PayCategory.CategoryName(支払いカテゴリの名前)を基準にPaymentデータをグループ化しています。
    • 例えば、"Food", "Transport", "Utilities"といったカテゴリごとにデータをまとめます。
  4. .Select(g => new { ... }):

    • グループ化されたデータ(g)を新しい匿名型オブジェクトに変換しています。
    • ここで、以下の2つのプロパティを作成しています:
      • labels = g.Key:
        • グループのキー(CategoryName)をlabelsとして設定します。
        • これはカテゴリ名のリスト(重複なし)になります。
      • data = g.Sum(x => x.Amount):
        • グループ内のAmount(支払い金額)の合計を計算し、dataとして設定します。
  5. 結果:

    • このクエリの結果は、カテゴリごとの支払い金額の合計を持つ匿名型オブジェクトのリストになります。
    • 例:
      Json
      [ { "labels": "Food", "data": 5000 }, { "labels": "Transport", "data": 3000 }, { "labels": "Utilities", "data": 7000 } ]

用途

このコードは、カテゴリごとの支払い金額を集計して、例えばグラフやチャート(円グラフや棒グラフなど)に表示するためのデータを生成する際に役立ちます。labelsがカテゴリ名、dataがそのカテゴリの合計金額として使われます。

添付画像

画像はありません
Genreのカテゴリ-名
Controllers
編集 | 記事一覧