跳過到頁腳內容
.NET幫助

C# LINQ 連接查詢語法(對於開發者的運行原理)

在 C# 程式設計的多樣性中,LINQ(語言整合查詢)脫穎而出,成為查詢和操作物件集合的強大工具。 在 LINQ 提供的眾多運算元中,Join 運算元在合併來自多個來源的資料時扮演關鍵角色。

在這篇文章中,我們將深入探討 C# LINQ Join 運算符號的複雜性,揭開其功能、語法和實際應用的面貌。

瞭解 Join Clause 的基本原理

LINQ Join 運算子的核心是根據指定的條件,將兩個或更多集合中的元素合併。 此操作員可讓開發人員在記憶體集合上執行類似 SQL 的連線,輕鬆合併來自不同來源的資料。

LINQ Join 運算子的語法

LINQ Join 運算符號的語法具有很強的表達力,並遵循類似 SQL 連結的模式。 基本語法如下:

var queryResult = 
    from element1 in collection1
    join element2 in collection2 on element1.Key equals element2.Key
    select new { element1, element2 };
var queryResult = 
    from element1 in collection1
    join element2 in collection2 on element1.Key equals element2.Key
    select new { element1, element2 };
Dim queryResult = From element1 In collection1
	Join element2 In collection2 On element1.Key Equals element2.Key
	Select New With {
		Key element1,
		Key element2
	}
$vbLabelText   $csharpLabel

在此語法中

  • element1element2 是變數,代表 collection1collection2 中的元素。
  • element1.Keyelement2.Key 是用作連接操作基礎的屬性。
  • equals 關鍵字指定連接的條件。
  • select 子句會建立一個結合兩個集合中元素的新物件。

LINQ Joins 的類型

LINQ 支援幾種類型的連接,包括

1.Inner Join: 只會回傳兩個集合中具有匹配關鍵的元素。

```csharp
var innerJoin = from customer in customers
                join order in orders on customer.CustomerID equals order.CustomerID // join orders to customers based on the customer ID key
                select new { customer.CustomerID, customer.CustomerName, order.OrderID }; // create a new anonymous object based on the objects obtained from the join
```

2.Left Outer Join (預設):回傳來自左集合的所有元素,以及來自右集合的符合元素。 如果未找到匹配,結果將包含右側元素的預設值。

```csharp
var leftOuterJoin = from customer in customers
                    join order in orders on customer.CustomerID equals order.CustomerID into customerOrders
                    from co in customerOrders.DefaultIfEmpty()
                    select new { customer.CustomerID, customer.CustomerName, OrderID = co?.OrderID ?? -1 };
```

3.Group Join: 將左側集合中的元素與右側集合中的匹配元素組合。

```csharp
var groupJoin = from customer in customers
                join order in orders on customer.CustomerID equals order.CustomerID into customerOrders
                select new { customer.CustomerID, customer.CustomerName, Orders = customerOrders };
```

實際應用:結合客戶和訂單資料

讓我們考慮一個實際的例子,我們有兩個集合:客戶訂單。 我們想要建立一個結果集,使用 LINQ Join 運算子將客戶資訊與其相對應的訂單結合。

var customerOrderInfo = 
    from customer in customers
    join order in orders on customer.CustomerID equals order.CustomerID
    select new { customer.CustomerID, customer.CustomerName, order.OrderID, order.OrderDate };
var customerOrderInfo = 
    from customer in customers
    join order in orders on customer.CustomerID equals order.CustomerID
    select new { customer.CustomerID, customer.CustomerName, order.OrderID, order.OrderDate };
Dim customerOrderInfo = From customer In customers
	Join order In orders On customer.CustomerID Equals order.CustomerID
	Select New With {
		Key customer.CustomerID,
		Key customer.CustomerName,
		Key order.OrderID,
		Key order.OrderDate
	}
$vbLabelText   $csharpLabel

在本範例中,結果集將包含客戶資訊及其相關訂單的項目。 join 延伸方法語法可協助 C# 開發人員執行類似 SQL 的 join 作業。

介紹 IronPDF。

C# LINQ Join Query Syntax (How It Works For Developers):圖 1 - IronPdf 網頁

Develop PDF Solutions with IronPDF 是一個全面的 C# 函式庫,專門用於建立、處理和編輯 PDF 文件。 它賦予開發人員從各種資料來源動態產生 PDF 的能力,使其成為需要產生 PDF 文件的應用程式的多功能解決方案。

安裝 IronPdf:快速入門

要開始在您的 C# 專案中利用 IronPDF 函式庫,您可以輕鬆安裝 IronPDF NuGet 套件。 在套件管理員控制台中使用下列指令:

Install-Package IronPdf 

另外,您也可以在 NuGet 套件管理員中搜尋"IronPDF",並從中安裝。

C# LINQ Join Query Syntax (How It Works For Developers):圖 2 - 從 NuGet 套件管理員安裝 IronPDF 函式庫

LINQ Join 與 IronPDF:動態雙人組?

LINQ Join 運算符號以其合併來自不同來源的資料的能力而聞名,在資料整合是關鍵的情況下,LINQ Join 運算符號可成為一項寶貴的資產。 當談到利用 IronPDF 的 LINQ Join 時,首要考慮的是您打算整合到 PDF 文件中的資料性質。

IronPdf 的亮點在於其HTML 至 PDF 轉換功能,可保持您的版面設計和樣式不變。 此功能可從網頁內容產生 PDF,非常適合報告、發票和文件。 HTML 檔案、URL 和 HTML 字串可無縫轉換為 PDF。

using IronPdf;

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

        // 1. 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");

        // 2. 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");

        // 3. 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();

        // 1. 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");

        // 2. 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");

        // 3. 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()

		' 1. 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")

		' 2. 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")

		' 3. 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

情境 1:在生成 PDF 之前組合資料

如果您的目標是在啟動 PDF 生成程序之前,將來自不同資料來源的資料結合起來,則可以獨立運用 LINQ Join。 一旦有了統一的資料集,您就可以利用 IronPDF 來根據整合的資料動態產生 PDF 文件。

以下是一個簡化的範例:

// Assume 'customerOrderInfo' is a result set obtained using LINQ Join
var pdfDocument = new IronPdf.ChromePdfRenderer();
foreach (var entry in customerOrderInfo)
{
    // Use IronPDF to add content to the PDF based on integrated data
    pdfDocument.AddHTML($"<p>Customer ID: {entry.CustomerID}, Order ID: {entry.OrderID}</p>");
}
// Save or render the PDF document as needed
pdfDocument.SaveAs("IntegratedDataDocument.pdf");
// Assume 'customerOrderInfo' is a result set obtained using LINQ Join
var pdfDocument = new IronPdf.ChromePdfRenderer();
foreach (var entry in customerOrderInfo)
{
    // Use IronPDF to add content to the PDF based on integrated data
    pdfDocument.AddHTML($"<p>Customer ID: {entry.CustomerID}, Order ID: {entry.OrderID}</p>");
}
// Save or render the PDF document as needed
pdfDocument.SaveAs("IntegratedDataDocument.pdf");
' Assume 'customerOrderInfo' is a result set obtained using LINQ Join
Dim pdfDocument = New IronPdf.ChromePdfRenderer()
For Each entry In customerOrderInfo
	' Use IronPDF to add content to the PDF based on integrated data
	pdfDocument.AddHTML($"<p>Customer ID: {entry.CustomerID}, Order ID: {entry.OrderID}</p>")
Next entry
' Save or render the PDF document as needed
pdfDocument.SaveAs("IntegratedDataDocument.pdf")
$vbLabelText   $csharpLabel

請造訪 IronPDF 文件,探索 PDF 文件產生的更多方式,以及如何使用 IronPDF 的 LINQ Join。

情境 2:PDF 生成过程中的动态数据集成

IronPDF 允許在 PDF 文件中加入動態內容,使得在 PDF 生成過程中使用 LINQ Join 整合資料成為可能。 在此,我們將建立並訂定客戶類別,以代表真實世界的應用程式。 資料來源可以是 SQL 資料庫或某些結構化格式,在本例中,是包含一組資料屬性的物件清單,就像資料庫中的表格一樣。 以下範例顯示 LINQ Join 方法與 IronPDF 的詳細整合,我們使用 HTML Strings for PDF Generation 來建立文件:

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

class Order
{
    public int OrderID { get; set; }
    public int CustomerID { get; set; }
    // Other order-related properties...
}

class Customer
{
    public int CustomerID { get; set; }
    // Other customer-related properties...
}

class Program
{
    static void Main()
    {
        // Sample orders collection
        var orders = new List<Order>
        {
            new Order { OrderID = 1, CustomerID = 1 },
            new Order { OrderID = 2, CustomerID = 1 },
            new Order { OrderID = 3, CustomerID = 2 },
        };

        // Sample customers collection
        var customers = new List<Customer>
        {
            new Customer { CustomerID = 1 },
            new Customer { CustomerID = 2 },
        };

        var pdfDocument = new ChromePdfRenderer();
        string htmlContent = "<h1>Details generated using LINQ JOIN</h1>";

        // Use join to find customer orders
        var query = from customer in customers
                    join order in orders on customer.CustomerID equals order.CustomerID
                    select new { CustomerID = customer.CustomerID, OrderID = order.OrderID };

        foreach (var result in query)
        {
            // Use IronPDF to dynamically add content to the PDF based on integrated data
            htmlContent += $"<p>Customer ID: {result.CustomerID}, Order ID: {result.OrderID}</p>";
        }

        // Save or render the PDF document as needed
        pdfDocument.RenderHtmlAsPdf(htmlContent)
                   .SaveAs("DynamicIntegratedDataDocument.pdf");
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using IronPdf;

class Order
{
    public int OrderID { get; set; }
    public int CustomerID { get; set; }
    // Other order-related properties...
}

class Customer
{
    public int CustomerID { get; set; }
    // Other customer-related properties...
}

class Program
{
    static void Main()
    {
        // Sample orders collection
        var orders = new List<Order>
        {
            new Order { OrderID = 1, CustomerID = 1 },
            new Order { OrderID = 2, CustomerID = 1 },
            new Order { OrderID = 3, CustomerID = 2 },
        };

        // Sample customers collection
        var customers = new List<Customer>
        {
            new Customer { CustomerID = 1 },
            new Customer { CustomerID = 2 },
        };

        var pdfDocument = new ChromePdfRenderer();
        string htmlContent = "<h1>Details generated using LINQ JOIN</h1>";

        // Use join to find customer orders
        var query = from customer in customers
                    join order in orders on customer.CustomerID equals order.CustomerID
                    select new { CustomerID = customer.CustomerID, OrderID = order.OrderID };

        foreach (var result in query)
        {
            // Use IronPDF to dynamically add content to the PDF based on integrated data
            htmlContent += $"<p>Customer ID: {result.CustomerID}, Order ID: {result.OrderID}</p>";
        }

        // Save or render the PDF document as needed
        pdfDocument.RenderHtmlAsPdf(htmlContent)
                   .SaveAs("DynamicIntegratedDataDocument.pdf");
    }
}
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports IronPdf

Friend Class Order
	Public Property OrderID() As Integer
	Public Property CustomerID() As Integer
	' Other order-related properties...
End Class

Friend Class Customer
	Public Property CustomerID() As Integer
	' Other customer-related properties...
End Class

Friend Class Program
	Shared Sub Main()
		' Sample orders collection
		Dim orders = New List(Of Order) From {
			New Order With {
				.OrderID = 1,
				.CustomerID = 1
			},
			New Order With {
				.OrderID = 2,
				.CustomerID = 1
			},
			New Order With {
				.OrderID = 3,
				.CustomerID = 2
			}
		}

		' Sample customers collection
		Dim customers = New List(Of Customer) From {
			New Customer With {.CustomerID = 1},
			New Customer With {.CustomerID = 2}
		}

		Dim pdfDocument = New ChromePdfRenderer()
		Dim htmlContent As String = "<h1>Details generated using LINQ JOIN</h1>"

		' Use join to find customer orders
		Dim query = From customer In customers
			Join order In orders On customer.CustomerID Equals order.CustomerID
			Select New With {
				Key .CustomerID = customer.CustomerID,
				Key .OrderID = order.OrderID
			}

		For Each result In query
			' Use IronPDF to dynamically add content to the PDF based on integrated data
			htmlContent &= $"<p>Customer ID: {result.CustomerID}, Order ID: {result.OrderID}</p>"
		Next result

		' Save or render the PDF document as needed
		pdfDocument.RenderHtmlAsPdf(htmlContent).SaveAs("DynamicIntegratedDataDocument.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

此代碼使用 join 關鍵字,可協助找到每位客戶的匹配訂單,使查詢更簡潔且更具表達力。

C# LINQ Join Query Syntax (How It Works For Developers):圖 3 - 上一個程式碼範例輸出的 PDF

結論

總而言之,IronPDF 是在 C# 應用程式中產生 PDF 的強大解決方案。 當與功能強大的 LINQ Join 運算符結合時,開發人員可以在 PDF 生成過程之前或過程中實現無縫的資料整合。 無論您是需要將客戶資訊與訂單合併,或是合併來自不同來源的資料,LINQ Join 與 IronPDF 的動態二重奏都能提供靈活有效的方法,增強您在 C# 應用程式中產生 PDF 的能力。

總而言之,C# LINQ Join 運算符號是一種強大的工具,可以無縫整合來自多個來源的資料。 無論您處理的是資料庫、API 回應或記憶體集合,LINQ Join 運算子都能簡化根據指定條件組合資料的過程。 當您在 C# 應用程式中瀏覽資料連線的多樣性時,請考慮 LINQ Join 運算子為您的資料整合工具包所帶來的強大功能與彈性。 掌握此操作符可為有效處理和操作資料開啟新的可能性,增強 C# 應用程式的功能。

IronPdf 提供免費試用版以進行評估,以測試其完整功能。 不過,一旦試用期過後,就需要適當的授權

常見問題解答

C# LINQ Join 運算符號的作用是什麼?

C# LINQ Join 運算符旨在根據指定條件合併來自多個集合的資料。它允許開發人員執行類似 SQL Join 的複雜資料整合,使其對於記憶體中的資料處理非常有價值。

如何在 C# 中將 HTML 轉換為 PDF?

您可以使用 IronPDF 的 RenderHtmlAsPdf 方法將 HTML 字串轉換成 PDF。您也可以使用 RenderHtmlFileAsPdf 將 HTML 檔案轉換成 PDF。

LINQ 支援哪些類型的連接?

LINQ 支援幾種類型的 Join,包括 Inner Join、Left Outer Join 和 Group Join。這些 Join 種類允許不同層級的資料整合,例如只傳回配對的元素或包含來自一個來源集合的所有元素。

如何將 LINQ Join 應用在實際情境中?

LINQ Join 可用於真實世界的情境中,以合併不同來源的資料,例如將客戶資訊與其訂單資料結合。這種整合有助於全面的資料分析和報告。

如何在我的專案中安裝 PDF 生成的 C# 函式庫?

您可以透過 NuGet 套件管理員將 IronPDF 安裝在您的 C# 專案中,方法是在套件管理員控制台中使用 Install-Package IronPdf 指令,或在 NuGet 套件管理員中搜尋「IronPDF」。

在 C# 中使用 PDF 產生函式庫有什麼好處?

使用 IronPDF 之類的函式庫可以從各種資料來源動態產生 PDF,並維持內容的排版和樣式。它特別適用於將 HTML 內容轉換為 PDF,以建立報告、發票和其他文件。

LINQ Join 和 PDF 產生函式庫如何一起運作?

您可以使用 LINQ Join 整合來自不同來源的資料,然後再使用 IronPDF 產生 PDF。這樣的組合可以建立以全面整合的資料集為基礎的動態 PDF 文件。

我可以在 PDF 生成過程中使用 LINQ Join 嗎?

是的,您可以在使用 IronPDF 生成 PDF 的同時使用 LINQ Join 來整合資料。這可讓您建立能反映即時資料整合的動態文件,提升文件建立的效率與彈性。

HTML 至 PDF 轉換功能提供哪些功能?

IronPdf 的 HTML 至 PDF 轉換功能可讓您將 HTML 檔案、URL 和 HTML 字串轉換為 PDF,同時保留排版和樣式。這對於從網頁內容生成視覺上一致的 PDF 文件尤其有用。

PDF 生成庫是否有評估選項?

是的,IronPDF 提供免費試用以進行評估。若要在試用期後繼續使用,則必須取得適當的授權,才能存取函式庫的完整功能。

Jacob Mellor, Team Iron 首席技术官
首席技术官

Jacob Mellor 是 Iron Software 的首席技術官,作為 C# PDF 技術的先鋒工程師。作為 Iron Software 核心代碼的原作者,他自開始以來塑造了公司產品架構,與 CEO Cameron Rimington 一起將其轉變為一家擁有超過 50 名員工的公司,為 NASA、特斯拉 和 全世界政府機構服務。

Jacob 持有曼徹斯特大學土木工程一級榮譽学士工程學位(BEng) (1998-2001)。他於 1999 年在倫敦開設了他的第一家軟件公司,並於 2005 年製作了他的首個 .NET 組件,專注於解決 Microsoft 生態系統內的複雜問題。

他的旗艦產品 IronPDF & Iron Suite .NET 庫在全球 NuGet 被安裝超過 3000 萬次,其基礎代碼繼續為世界各地的開發工具提供動力。擁有 25 年的商業經驗和 41 年的編碼專業知識,Jacob 仍專注於推動企業級 C#、Java 及 Python PDF 技術的創新,同時指導新一代技術領袖。