IRONSOFTWAREHOME
開発者向けアップデート

C# Groupby(開発者向けの動作方法)

Jacob Mellor、Ironチームの最高技術責任者(CTO)
Jacob Mellor
Updated: 2026年4月21日

C#では、GroupByメソッドは、指定されたキーに基づいてデータソースの要素をグループに整理する強力なツールです。 このメソッドはLINQ (Language Integrated Query) の一部であり、単一のプロパティまたは複数のプロパティによってアイテムをグループ化することができ、データ分析と操作に非常に有用です。 GroupByメソッドは複雑なデータ操作を簡略化し、特定の基準に基づいて効率的なデータの組織化と取得を可能にします。 このブログでは、GroupByとIronPDFライブラリについて話し合います。

GroupByの基本

GroupByメソッドの本質は、指定されたキーに従って、特定のコレクションの要素をグループに分類する能力にあります。 このキーのプロパティは、アイテムのグループ化方法を決定します。 たとえば、学生のリストを年齢キーの値でグループ化し、同じ年齢の学生のクラスターを作成することができます。 各グループはキーの値と、そのキーを共有するアイテムのコレクションによって表されます。 キーのプロパティは、文字列、数値、または匿名オブジェクトのように、データがどのようにグループ化されるかにおいて柔軟性を提供する任意のオブジェクトになり得ます。

メソッド構文を使用したGroupBy使用法

C#では、GroupByメソッドを適用するには、メソッド構文とクエリ構文の2つの方法があります。 メソッド構文は、グループ化キーを定義するためのラムダ式を使用し、GroupBy操作を適用するための直接的な方法です。

メソッド構文を使用して学生を年齢によってグループ化する次の例を考えてみましょう。

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

public class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public class Program
{
    public static void Main()
    {
        List<Student> studentList = new List<Student>
        {
            new Student { Name = "Alice", Age = 20 },
            new Student { Name = "Bob", Age = 20 },
            new Student { Name = "Charlie", Age = 21 }
        };
        
        // Group students by their age using GroupBy
        var groupedResult = studentList.GroupBy(student => student.Age);
        
        foreach (var group in groupedResult)
        {
            Console.WriteLine($"Age Group: {group.Key}");
            
            foreach (var student in group)
            {
                Console.WriteLine($"Student Name: {student.Name}");
            }
        }
    }
}

C# GroupBy (開発者向けの働き): 図1 - 前のコード例からのコンソール出力

LINQ GroupByメソッドは、Ageのキー値によって学生をグループ化するためにラムダ式を使用します。 group.Keyは年齢グループを表し、内部のforeachループはグループ内の各学生を反復し、その名前を印刷します。

クエリ構文を使用したGroupByの活用

クエリ構文は、SQLのようなクエリに似た形でグループ化操作を行うためのより表現力豊かな方法を提供します。 複雑なデータ変換や複数のグループ化基準を扱う際に特に有用です。 前の例と同様の機能をクエリ構文で達成する方法は次のとおりです。

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

public static class Program
{
    public static void Main()
    {
        List<Student> studentList = new List<Student>
        {
            new Student { Name = "Alice", Age = 20 },
            new Student { Name = "Bob", Age = 20 },
            new Student { Name = "Charlie", Age = 21 }
        };
        
        // Group students by their age using query syntax
        var groupedResult = from student in studentList
                            group student by student.Age into ageGroup
                            select new { Age = ageGroup.Key, Students = ageGroup };
                            
        foreach (var group in groupedResult)
        {
            Console.WriteLine($"Age Group: {group.Age}");
            
            foreach (var student in group.Students)
            {
                Console.WriteLine($"Student Name: {student.Name}");
            }
        }
    }
}

このスニペットでは、クエリ構文によって、メソッド構文と同様に学生が年齢によってグループ化されますが、異なる構文を持っており、一部の人々にはより読みやすく見えるかもしれません。

複数のキーとプロパティによるグループ化

GroupByメソッドのより高度な使用法により、複数のキーまたはプロパティによってデータをグループ化することができます。 この技術により、複数の値に基づいてより詳細なデータ分析とカテゴリ分けが可能になります。 匿名オブジェクトやタプルを使うことで、複数のプロパティの組み合わせに基づいてアイテムをグループ化でき、アプリケーションのためのより豊かなデータ構造を提供します。

例: 名前と年齢による学生のグループ化

リスト内で同じ名前と年齢のキー値を持つ学生を特定するために、年齢に加えて名前で学生をグループ化する必要があるシナリオを考えてみましょう。これは、名前と年齢を含む匿名の型によってグループ化することによって達成できます。

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

public static class Program
{
    public static void Main()
    {
        List<Student> studentList = new List<Student>
        {
            new Student { Name = "Alice", Age = 20 },
            new Student { Name = "Alice", Age = 21 },
            new Student { Name = "Bob", Age = 20 },
            new Student { Name = "Charlie", Age = 21 }
        };
        
        // Group students by both Name and Age using an anonymous type as the key
        var groupedResult = studentList.GroupBy(student => new { student.Name, student.Age });
        
        foreach (var group in groupedResult)
        {
            Console.WriteLine($"Group Key: Name = {group.Key.Name}, Age = {group.Key.Age}");
            
            foreach (var student in group)
            {
                Console.WriteLine($"Student Name: {student.Name}, Age: {student.Age}");
            }
        }
    }
}

この例では、匿名の型をキーとして使用して、名前と年齢によって学生がグループ化されます。 これにより、名前と年齢の一意の組み合わせごとに別々のグループとして表されるグループが作成され、複雑なグループ化シナリオに対応するためのGroupByの柔軟性が示されます。

追加のGroupBy情報

高度なGroupByの使用

複数のキー値によってグループ化する必要がある場合や、グループ化データに対して追加の操作を実行したい場合、たとえばカウント、フィルタリング、または順序付けを行う際に、GroupByはさらに強力なものとなります。 これを達成するために、他のLINQメソッドとGroupByを組み合わせたり、複数のプロパティによってグループ化するために匿名の型を使用したりすることができます。

GroupByの遅延実行

GroupByが遅延実行を利用しており、指定されたキーによって反復される際にアイテムを処理することに注意することが重要です。 これは、GroupByメソッドが呼び出された際にグループ化操作が直ちに実行されないことを意味します。 代わりに、グループ化されたデータが反復されるまで、例えばforeachループで、実行は遅延されます。この挙動は効率的であり、データが最終的に処理される前にさらなるクエリ最適化と変更を可能にします。

IronPDFのC#プロジェクトへの導入

C# GroupBy (開発者向けの働き): 図2 - IronPDFウェブページ

IronPDFは、C#用の包括的なライブラリで、開発者が.NETアプリケーション内でPDFドキュメントを作成、操作、変換することを可能にします。 この強力なツールは、HTMLからPDFを生成することから既存のPDFファイルを編集することまで、幅広い機能を提供します。 IronPDFはあなたのアプリケーションにPDF機能を統合することを簡略化し、PDF操作を必要とするプロジェクトにとって貴重な資産となります。

IronPDFの主な機能は、レイアウトとスタイルが保持されるHTMLからPDF変換です。 WebコンテンツからPDFを生成し、レポート、請求書、ドキュメントに最適です。 HTMLファイル、URL、およびHTML文字列をシームレスにPDFに変換できます。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}

グループ化データからのPDFレポートの生成

学生を年齢キー値でグループ化する前の例を拡充しましょう。 学生をグループ化した後、IronPDFを使用して、各グループとそのグループ内の学生名を記載したPDFレポートを生成します。

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

public class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public class Program
{
    public static void Main()
    {
        // Initialize IronPDF license if applicable
        IronPdf.License.LicenseKey = "License";
        
        List<Student> studentList = new List<Student>
        {
            new Student { Name = "Alice", Age = 20 },
            new Student { Name = "Bob", Age = 20 },
            new Student { Name = "Charlie", Age = 21 },
            new Student { Name = "David", Age = 21 }
        };
        
        // Group students by their age
        var groupedResult = studentList.GroupBy(student => student.Age);
        
        // Create HTML content for the PDF report
        var htmlContent = "<h1>Student Report</h1>";
        
        foreach (var group in groupedResult)
        {
            htmlContent += $"<h2>Age Group: {group.Key}</h2><ul>";
            
            foreach (var student in group)
            {
                htmlContent += $"<li>{student.Name}</li>";
            }
            
            htmlContent += "</ul>";
        }
        
        // Initialize IronPDF renderer and generate PDF
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        
        // Specify path to save the PDF file
        var outputPath = "StudentReport.pdf";
        pdf.SaveAs(outputPath);
        
        Console.WriteLine($"PDF report generated at {outputPath}");
    }
}

この例では、最初にGroupByメソッドを使用して学生を年齢でグループ化します。 次に、メソッドが返すHTML文字列を構築し、このグループ化されたデータを報告書としてフォーマットし、各年齢グループの見出しとその下にある学生名のリストを持たせます。次に、IronPDFのChromePdfRendererクラスを使用して、このHTML文字列をPDFドキュメントに変換します。 結果として得られるPDFはファイルに保存され、年齢でグループ化された学生のきれいにフォーマットされたレポートを提供します。

出力

以下に、IronPDFで生成されたPDFの出力を示します。

C# GroupBy (開発者向けの働き): 図3 - 前回のコード例から出力されたPDF

結論

C# GroupBy (開発者向けの働き): 図4 - IronPDFライセンスプラン

C#のGroupByメソッドは、指定されたキーに基づいてデータをグループ化するための多用途で強力なツールです。 ラムダ式を用いたメソッド構文を好むか、より宣言的なクエリ構文を好むかにかかわらず、GroupByは複雑なデータ構造を管理しやすく読みやすい方法で整理することを可能にします。 GroupByや他のLINQメソッドを習得することで、C#アプリケーションにおけるデータの操作と分析の能力を大幅に向上させることができます。

IronPDFは、購入を決定する前にその機能を探索したい人のために無料トライアルを提供しています。 プロジェクトに統合する準備ができている方には、ライセンスは$999から始まり、C#アプリケーションでのプロフェッショナルなPDF操作や生成にとって価値ある投資です。

Jacob Mellor、Ironチームの最高技術責任者(CTO)
最高技術責任者(CTO)

ジェイコブ・メラーはIron Softwareの最高技術責任者(CTO)であり、C# PDFテクノロジーを開拓する先見的なエンジニアです。Iron Softwareのコアコードベースを支えるオリジナル開発者として、彼は創業以来、会社の製品アーキテクチャを形成し、CEOのCameron Rimingtonとともに、会社をNASA、Tesla、および世界的な政府機関にサービスを提供する50人以上の会社に変えました。1999年にロンドンで最初のソフトウェアビジネスを開業し、2005年に最初 for .NETコンポーネントを作成した後、Microsoftのエコシステム全体で複雑な問題を解決することを専門としました。

関連する記事

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

OR
bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。
PDF用C# NuGetライブラリ
NuGetでインストール

バージョン: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. ソリューションエクスプローラーで参照を右クリックし、NuGetパッケージを管理を選択
  2. ブラウズを選択し、"IronPDF"を検索
  3. パッケージを選択してインストール
C# PDF DLL
DLLをダウンロード

バージョン: 2026.9

またはここからWindowsインストーラーをダウンロードする。

  1. IronPDFを~/Libsなどの場所に解凍し、ソリューションディレクトリ内に配置する
  2. Visual Studioソリューションエクスプローラーで参照を右クリックし、"IronPDF.dll"をブラウズして選択

ライセンスは$999から