C# Groupby(開發者使用方法)
在 C# 中,GroupBy 方法是一個功能強大的工具,可根據指定的關鍵將資料來源中的元素組織成群組。 此方法是 LINQ(語言整合查詢)的一部分,可用於將項目依單一或多個屬性進行群組,對於資料分析與處理而言非常有價值。 GroupBy 方法簡化了複雜的資料作業,允許根據特定條件進行有效的資料組織和檢索。 我們將在這篇部落格中討論 GroupBy 和 IronPDF Library。
GroupBy 的基本原理
GroupBy 方法的精髓在於它能夠根據指定的關鍵將給定集合的元素歸類為群組。 此關鍵屬性決定項目如何分組。 例如,您可以根據年齡關鍵值對學生清單進行分組,創建具有相同年齡的學生群組。 每個群組由一個關鍵值和共用該關鍵值的項目集合來表示。 關鍵屬性可以是任何物件,例如字串、數字,甚至是匿名物件,提供資料組合方式的彈性。
使用方法語法的 GroupBy
在 C# 中,應用 GroupBy 方法有兩種方式:方法語法和查詢語法。 方法語法使用 lambda 表達式定義群組鍵,是應用 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}");
}
}
}
}
LINQ GroupBy 方法使用 lambda 表達式按 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}");
}
}
}
}在此片段中,查詢語法依 Age 將學生分組,類似於方法語法,但語法不同,有些人認為更易於閱讀。
透過多個鍵和屬性進行群組。
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}");
}
}
}
}在這個範例中,以匿名類型為關鍵,將學生依姓名和年齡分組。 結果是每個名稱和年齡的獨特組合都代表一個獨立的群組,展現出 GroupBy 在複雜群組情況下的彈性。
額外的 GroupBy 資訊
進階 GroupBy 使用方式
當您需要以多個關鍵值進行群組,或想要對群組資料執行其他操作(例如計數、篩選或排序)時,GroupBy 就會變得更加強大。 您可以透過將 GroupBy 與其他 LINQ 方法結合,或使用匿名類型以多個屬性進行群組,來達到此目的。
GroupBy 中的延遲執行
值得注意的是,GroupBy 採用延遲執行的方式,在以指定的關鍵迭代時處理項。 這表示在呼叫 GroupBy 方法時,不會立即執行群組操作。 相反地,執行會延遲到群組資料被遍歷之後,例如在 foreach 環路中。這種行為很有效率,因為它允許在資料最後被處理之前進行進一步的查詢最佳化和修改。
將 IronPDF 介紹給 C# 專案。

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");
}
}從群組資料產生 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}");
}
}在這個範例中,我們首先使用 GroupBy 方法將學生依年齡分組。 然後,我們會建構一個 HTML 字串(此方法會傳回此字串),將這組資料格式化為一份報告,其中包含每個年齡群組的標題,以及每個群組下的學生姓名清單。之後,我們使用 IronPDF 的 ChromePdfRenderer 類將這個 HTML 字串轉換成 PDF 文件。 所產生的 PDF 將儲存為檔案,提供一份格式整齊、按年齡分類的學生報告。
輸出
以下是 IronPDF 生成的输出 PDF:

結論
。
C# 中的 GroupBy 方法是一個多功能且功能強大的工具,用來根據指定的關鍵對資料進行分組。 無論您是偏好使用 lambda 表達式的方法語法,還是更偏好宣告式的查詢語法,GroupBy 都能讓您以易於管理和閱讀的方式組織複雜的資料結構。 透過掌握 GroupBy 和其他 LINQ 方法,您可以大幅提升在 C# 應用程式中處理和分析資料的能力。
IronPdf 提供免費試用,供希望在購買前瞭解其功能的人士使用。 對於那些準備將其整合到專案中的人而言,$799的授權起始價格,使其成為在 C# 應用程式中進行專業級 PDF 操作和生成的一項值得投資的項目。
常見問題解答
C# 中的 GroupBy 方法是什麼?
在 C# 中,GroupBy 方法是 LINQ 的一項功能,它可以根據指定的鍵將資料來源中的元素組織成群組,從而簡化資料分析和操作。
C# 中 GroupBy 方法如何使用方法語法?
使用帶有 lambda 表達式的方法語法,GroupBy 方法可以按指定的鍵將元素分組。例如,您可以按年齡將學生清單分組,從而建立年齡相近的學生群。
GroupBy 方法可以使用查詢語法嗎?
是的,查詢語法可以與 GroupBy 方法一起使用,從而提供一種更像 SQL 且更具表現力的方式來執行分組操作,尤其適用於複雜的資料轉換。
如何使用 GroupBy 按多個鍵將資料分組?
您可以使用匿名物件或元組按多個鍵對資料進行分組,從而基於屬性組合進行更詳細的資料分析。
在 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。







