跳至頁尾內容
.NET幫助

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

在C#程式設計的多功能性中,LINQ(語言整合查詢)作為一個強大的工具,專門用於查詢和處理物件集合。 在LINQ提供的眾多操作符中,連接操作符在合併來自多個來源的資料時是一個關鍵。

在本文中,我們將深入探討C# LINQ連接操作符,解開其功能、語法以及實際應用。

理解連接子句的基本原理

LINQ連接操作符的核心是設計用於根據指定條件合併來自兩個或多個集合的元素。 這個操作符使開發者能在記憶體中的集合上執行類似SQL的連接操作,從而輕鬆合併來自不同來源的資料。

LINQ連接操作符的語法

LINQ連接操作符的語法表達力強,遵循類似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

在這個語法中:

  • 元素1元素2是代表來自集合1集合2的元素的變數。
  • 元素1.鍵元素2.鍵是用作連接操作基礎的屬性。
  • 等於關鍵字指定了連接的條件。
  • 選擇子句建立了結合兩個集合元素的新物件。

LINQ連接的型別

LINQ支持多種型別的連接,包括:

  1. 內連接:僅返回在兩個集合中具有匹配鍵的元素。

    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
    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
    Dim innerJoin = From customer In customers ' create a new anonymous object based on the objects obtained from the join
    	Join order In orders On customer.CustomerID Equals order.CustomerID
    	Select New With {
    		Key customer.CustomerID,
    		Key customer.CustomerName,
    		Key order.OrderID
    	}
    $vbLabelText   $csharpLabel
  2. 左外連接(預設):返回左集合的所有元素和右集合中的匹配元素。 如果沒有找到匹配,結果將包含右側元素的預設值。

    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 };
    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 };
    Dim leftOuterJoin = From customer In customers
    	Group Join order In orders On customer.CustomerID Equals order.CustomerID Into customerOrders = Group
    	From co In customerOrders.DefaultIfEmpty()
    	Select New With {
    		Key customer.CustomerID,
    		Key customer.CustomerName,
    		Key .OrderID = If(co?.OrderID, -1)
    	}
    $vbLabelText   $csharpLabel
  3. 分組連接:將左集合中的元素與右集合中的匹配元素分組。

    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 };
    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 };
    Dim groupJoin = From customer In customers
    	Group Join order In orders On customer.CustomerID Equals order.CustomerID Into customerOrders = Group
    	Select New With {
    		Key customer.CustomerID,
    		Key customer.CustomerName,
    		Key .Orders = customerOrders
    	}
    $vbLabelText   $csharpLabel

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

考慮一下實際範例,我們有兩個集合:客戶訂單。 我們希望使用LINQ連接操作符建立一個包含客戶資訊和其相應訂單的結果集。

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

在此範例中,結果集將包含包含客戶資訊及其相關訂單的條目。 連接擴展方法語法幫助C#開發者執行類似SQL的連接操作。

介紹IronPDF

C# LINQ連接查詢語法(它如何為開發者工作):圖1 - IronPDF網頁

使用IronPDF開發PDF解決方案是一個全面的C#程式庫,專為建立、處理和編輯PDF文件而設計。 它使開發者能夠動態從各種資料來源生成PDF,是需要PDF文件生成的應用程式的多功能解決方案。

安裝IronPDF:快速入門

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

Install-Package IronPdf 

或者,您可以在NuGet套件管理器中搜尋"IronPDF"並從那裡安裝它。

C# LINQ連接查詢語法(它如何為開發者工作):圖2 - 從NuGet套件管理器安裝IronPDF程式庫

LINQ連接和IronPDF:動態雙重奏?

LINQ連接操作符以其合併來自不同來源的資料能力而聞名,它在資料整合關鍵的情境中可成為寶貴的資產。 當涉及到將LINQ連接與IronPDF一起使用時,主要考量是您想要整合到PDF文件中的資料的性質。

IronPDF的亮點是其HTML到PDF轉換功能,它保持您的佈局和樣式不變。 這一功能允許從Web內容生成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連接。 一旦有了統一的資料集,您可以利用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

查看更多PDF文件生成的方式及如何將LINQ連接與IronPDF一起使用,請存取IronPDF文件

場景2:在PDF生成過程中動態資料整合

IronPDF允許在PDF文件中新增動態內容,使其在PDF生成過程中使用LINQ連接實現資料整合成為可能。 在這裡,我們將建立和訂購客戶類以代表實際應用。 資料來源可以是SQL資料庫或某些結構化格式,例如包含一組資料屬性的物件列表,類似於資料庫中的表格。 以下範例展示了使用IronPDF與LINQ連接方法的詳細整合,我們使用HTML字元串來進行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");
    }
}
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連接查詢語法(它如何為開發者工作):圖3 - 前述程式碼範例的輸出PDF

結論

總之,IronPDF在C#應用程式中的PDF生成是個強大的解決方案。 當結合強大的LINQ連接操作符時,開發者能夠在PDF生成過程之前或期間實現無縫資料整合。 無論您需要合併客戶資訊與訂單,還是合併來自多種來源的資料,LINQ連接和IronPDF的動態雙重奏提供了一種靈活且高效的方式來增強您在C#應用程式中的PDF生成能力。

總之,C# LINQ連接操作符是無縫整合從多個來源資料的強大工具。 無論您是在處理資料庫、API響應還是記憶體中的集合,LINQ連接操作符都簡化了基於指定條件合併資料的過程。 當您在C#應用程式中導航多樣的資料連接時,請考慮LINQ連接操作符帶給您的資料整合工具包的力量和靈活性。 掌握這個操作符為有效地工作及操作資料開啟了新的可能性,增強了您的C#應用程式的能力。

IronPDF提供免費試用以供評估,以測試其完整功能。 然而,一旦試用期結束,就需要適當授權

常見問題

C# LINQ Join運算子的目的是什麼?

C# LINQ Join運算子旨在根據指定條件合併多個集合的資料。它允許開發者執行類似SQL Join的複雜資料整合,使其在記憶體中的資料操作中具備無價的價值。

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

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

LINQ支持哪些型別的Join?

LINQ支持多種型別的Join,包括內部Join、左外部Join和群組Join。這些Join型別允許不同層次的資料整合,例如只返回匹配的元素或包含一個來源集合的所有元素。

LINQ Join可以如何應用於實際情境中?

LINQ Join可以用於現實場景中合併不同來源的資料,如結合客戶資訊和其訂單資料。此整合有助於綜合資料分析和報告。

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

您可以透過NuGet包管理器在C#專案中安裝IronPDF,使用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核心程式碼庫的原開發者,他從創立以來就一直在塑造公司的產品架構,與首席執行官Cameron Rimington一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。

Jacob擁有曼徹斯特大學的土木工程一等榮譽學士學位(BEng),於1998-2001年之間獲得。在1999年於倫敦創辦他的第一家軟體公司並於2005年建立了他的第一批.NET元組件後,他專注於解決Microsoft生態系統中的複雜問題。

他的旗艦IronPDF和Iron Suite .NET程式庫在全球獲得了超過3000萬次NuGet安裝依據,他的基礎程式碼基繼續支援著世界各地開發者使用的工具。擁有25年的商業經驗和41年的程式設計專業知識,他仍專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話