.NETヘルプ C# Groupby(開発者向けの動作方法) Curtis Chau 更新日:6月 22, 2025 Download IronPDF NuGet Download テキストの検索と置換 テキストと画像のスタンプ Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article 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}"); } } } } 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}"); } } } } Imports System Imports System.Collections.Generic Imports System.Linq Public Class Student Public Property Name() As String Public Property Age() As Integer End Class Public Class Program Public Shared Sub Main() Dim studentList As New List(Of Student) From { New Student With { .Name = "Alice", .Age = 20 }, New Student With { .Name = "Bob", .Age = 20 }, New Student With { .Name = "Charlie", .Age = 21 } } ' Group students by their age using GroupBy Dim groupedResult = studentList.GroupBy(Function(student) student.Age) For Each group In groupedResult Console.WriteLine($"Age Group: {group.Key}") For Each student In group Console.WriteLine($"Student Name: {student.Name}") Next student Next group End Sub End Class $vbLabelText $csharpLabel 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}"); } } } } 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}"); } } } } Imports System Imports System.Collections.Generic Imports System.Linq Public Module Program Public Sub Main() Dim studentList As New List(Of Student) From { New Student With { .Name = "Alice", .Age = 20 }, New Student With { .Name = "Bob", .Age = 20 }, New Student With { .Name = "Charlie", .Age = 21 } } ' Group students by their age using query syntax Dim groupedResult = From student In studentList Group student By student.Age Into ageGroup = Group Select New With { Key .Age = Age, Key .Students = ageGroup } For Each group In groupedResult Console.WriteLine($"Age Group: {group.Age}") For Each student In group.Students Console.WriteLine($"Student Name: {student.Name}") Next student Next group End Sub End Module $vbLabelText $csharpLabel このスニペットでは、クエリ構文によって、メソッド構文と同様に学生が年齢によってグループ化されますが、異なる構文を持っており、一部の人々にはより読みやすく見えるかもしれません。 複数のキーとプロパティによるグループ化 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}"); } } } } 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}"); } } } } Imports System Imports System.Collections.Generic Imports System.Linq Public Module Program Public Sub Main() Dim studentList As New List(Of Student) From { New Student With { .Name = "Alice", .Age = 20 }, New Student With { .Name = "Alice", .Age = 21 }, New Student With { .Name = "Bob", .Age = 20 }, New Student With { .Name = "Charlie", .Age = 21 } } ' Group students by both Name and Age using an anonymous type as the key Dim groupedResult = studentList.GroupBy(Function(student) New With { Key student.Name, Key student.Age }) For Each group In groupedResult Console.WriteLine($"Group Key: Name = {group.Key.Name}, Age = {group.Key.Age}") For Each student In group Console.WriteLine($"Student Name: {student.Name}, Age: {student.Age}") Next student Next group End Sub End Module $vbLabelText $csharpLabel この例では、匿名の型をキーとして使用して、名前と年齢によって学生がグループ化されます。 これにより、名前と年齢の一意の組み合わせごとに別々のグループとして表されるグループが作成され、複雑なグループ化シナリオに対応するためのGroupByの柔軟性が示されます。 追加のGroupBy情報 高度なGroupByの使用 複数のキー値によってグループ化する必要がある場合や、グループ化データに対して追加の操作を実行したい場合、たとえばカウント、フィルタリング、または順序付けを行う際に、GroupByはさらに強力なものとなります。 これを達成するために、他のLINQメソッドとGroupByを組み合わせたり、複数のプロパティによってグループ化するために匿名の型を使用したりすることができます。 GroupByの遅延実行 GroupByが遅延実行を利用しており、指定されたキーによって反復される際にアイテムを処理することに注意することが重要です。 これは、GroupByメソッドが呼び出された際にグループ化操作が直ちに実行されないことを意味します。 代わりに、グループ化されたデータが反復されるまで、例えばforeachループで、実行は遅延されます。この挙動は効率的であり、データが最終的に処理される前にさらなるクエリ最適化と変更を可能にします。 C#プロジェクトへのIronPDFの紹介 IronPDFは、C#用の包括的なライブラリで、開発者が.NETアプリケーション内でPDFドキュメントを作成、操作、変換することを可能にします。 この強力なツールは、HTMLからPDFを生成することから既存のPDFファイルを編集することまで、幅広い機能を提供します。 IronPDFはあなたのアプリケーションにPDF機能を統合することを簡略化し、PDF操作を必要とするプロジェクトにとって貴重な資産となります。 IronPDFの主な機能は、レイアウトとスタイルが保持されるHTMLからPDF変換です。 ウェブコンテンツから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"); } } 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"); } } Imports IronPdf Friend Class Program Shared Sub Main(ByVal args() As String) Dim renderer = New ChromePdfRenderer() ' Convert HTML String to PDF Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>" Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent) pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf") ' Convert HTML File to PDF Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath) pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf") ' Convert URL to PDF Dim url = "http://ironpdf.com" ' Specify the URL Dim pdfFromUrl = renderer.RenderUrlAsPdf(url) pdfFromUrl.SaveAs("URLToPDF.pdf") End Sub End Class $vbLabelText $csharpLabel グループ化データからの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}"); } } 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}"); } } Imports IronPdf Imports System Imports System.Collections.Generic Imports System.Linq Public Class Student Public Property Name() As String Public Property Age() As Integer End Class Public Class Program Public Shared Sub Main() ' Initialize IronPDF license if applicable IronPdf.License.LicenseKey = "License" Dim studentList As New List(Of Student) From { New Student With { .Name = "Alice", .Age = 20 }, New Student With { .Name = "Bob", .Age = 20 }, New Student With { .Name = "Charlie", .Age = 21 }, New Student With { .Name = "David", .Age = 21 } } ' Group students by their age Dim groupedResult = studentList.GroupBy(Function(student) student.Age) ' Create HTML content for the PDF report Dim htmlContent = "<h1>Student Report</h1>" For Each group In groupedResult htmlContent &= $"<h2>Age Group: {group.Key}</h2><ul>" For Each student In group htmlContent &= $"<li>{student.Name}</li>" Next student htmlContent &= "</ul>" Next group ' Initialize IronPDF renderer and generate PDF Dim renderer = New ChromePdfRenderer() Dim pdf = renderer.RenderHtmlAsPdf(htmlContent) ' Specify path to save the PDF file Dim outputPath = "StudentReport.pdf" pdf.SaveAs(outputPath) Console.WriteLine($"PDF report generated at {outputPath}") End Sub End Class $vbLabelText $csharpLabel この例では、最初にGroupByメソッドを使用して学生を年齢でグループ化します。 次に、メソッドが返すHTML文字列を構築し、このグループ化されたデータを報告書としてフォーマットし、各年齢グループの見出しとその下にある学生名のリストを持たせます。次に、IronPDFのChromePdfRendererクラスを使用して、このHTML文字列をPDFドキュメントに変換します。 結果として得られるPDFはファイルに保存され、年齢でグループ化された学生のきれいにフォーマットされたレポートを提供します。 出力 以下に、IronPDFで生成されたPDFの出力を示します。 結論 C#のGroupByメソッドは、指定されたキーに基づいてデータをグループ化するための多用途で強力なツールです。 ラムダ式を使用したメソッド構文や、より宣言的なクエリ構文を好むかどうかにかかわらず、GroupByは、複雑なデータ構造を管理可能で読みやすい形に整理することを可能にします。 GroupByや他のLINQメソッドを習得することで、C#アプリケーションにおけるデータの操作と分析の能力を大幅に向上させることができます。 IronPDFは、購入を決定する前にその機能を探索したい人のために無料トライアルを提供しています。 プロジェクトに統合する準備ができた人のために、ライセンスは$799から始まり、C#アプリケーションにおけるプロフェッショナル・グレードのPDF操作と生成を行う価値ある投資となります。 よくある質問 C# における GroupBy メソッドとは何ですか? C# では、GroupBy メソッドは LINQ の機能であり、指定されたキーに基づいてデータ ソースの要素をグループ化し、データの分析と操作を簡素化します。 C# のメソッド構文で GroupBy メソッドはどのように機能しますか? メソッド構文でラムダ式を使用して、GroupBy メソッドは指定されたキーで要素をグループ化します。たとえば、学生のリストを年齢でグループ化し、同じ年齢の学生のクラスタを作成できます。 GroupBy メソッドでクエリ構文を使用できますか? はい、クエリ構文を GroupBy メソッドで使用することができ、特に複雑なデータ変換のために、より SQL に似た表現力のある方法でグループ化操作を実行できます。 複数のキーを使用してデータをグループ化するにはどうすれば良いですか? 匿名オブジェクトやタプルを使用することでデータを複数のキーでグループ化でき、プロパティの組み合わせに基づく詳細なデータ解析が可能となります。 GroupBy の文脈における遅延実行とは何ですか? 遅延実行とは、GroupBy 操作が呼び出されたときに直ちに実行されるわけではないことを意味します。グループ化されたデータが反復処理されるときに処理され、クエリ最適化を可能にします。 C# を使用してグループ化されたデータから PDF レポートを生成するにはどうすれば良いですか? IronPDF を使用して、グループ化されたデータをレポートにフォーマットする HTML 文字列を PDF ドキュメントに変換できます。これにより、GroupBy でグループ化されたデータからの整然としたフォーマットの PDF レポートの簡単な生成が可能になります。 C# の高度なグループ化技術にはどのようなものがありますか? C# の高度なグループ化技術には、匿名オブジェクトやタプルを使用してデータを複数のキーやプロパティでグループ化することが含まれ、複雑なデータ分析の能力を高めます。 IronPDF は .NET アプリケーションでプロ仕様の PDF 管理をどのように助けますか? IronPDF は C# 開発者に PDF ドキュメントを作成および操作するツールを提供し、HTML コンテンツからの PDF レポート生成を含みます。これにより、.NET アプリケーションでプロ仕様の PDF を効率的に管理することができます。 C#でHTMLをPDFに変換する方法は? IronPDF の RenderHtmlAsPdf メソッドを使用して、HTML 文字列を PDF に変換できます。RenderHtmlFileAsPdf を使用して HTML ファイルを PDF に変換することもできます。 Curtis Chau 今すぐエンジニアリングチームとチャット テクニカルライター Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。 関連する記事 更新日 9月 4, 2025 RandomNumberGenerator C# RandomNumberGenerator C#クラスを使用すると、PDF生成および編集プロジェクトを次のレベルに引き上げることができます 詳しく読む 更新日 9月 4, 2025 C# String Equals(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む 更新日 8月 5, 2025 C# Switch Pattern Matching(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む IndexOf C#(開発者向けの動作方法)C# Imap(開発者向けの動作...
更新日 9月 4, 2025 RandomNumberGenerator C# RandomNumberGenerator C#クラスを使用すると、PDF生成および編集プロジェクトを次のレベルに引き上げることができます 詳しく読む
更新日 9月 4, 2025 C# String Equals(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む
更新日 8月 5, 2025 C# Switch Pattern Matching(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む