共用方式為


在 C# 中使用 LINQ

更新:2007 年 11 月

應用程式經常會使用 SQL 資料庫或 XML 文件中的資料。傳統上,開發人員必須學習主要程式設計語言 (如 C#) 和次要語言 (如 SQL 或 XQuery)。Language-Integrated Query (LINQ) 已將查詢功能融入 C# 語言本身當中。現在,您完全不需要另外學習查詢語言,只要運用現有的 C# 知識,再加上一些額外的關鍵字和概念,就能查詢 SQL 資料庫、ADO.NET 資料集、XML 文件,以及任何實作 IEnumerable 介面的 .NET 集合類別 (Class)。

使用 LINQ 的優點

  • 使用熟悉的語法撰寫查詢。

  • 編譯時期的語法錯誤和型別安全檢查。

  • 改進的偵錯工具支援。

  • IntelliSense 支援。

  • 可以直接處理 XML 項目,而不需像 W3C DOM 一樣必須建立容器 (Container) XML 文件。

  • 記憶體中 XML 文件修改,不僅功能強大,而且比 XPath 或 XQuery 更容易使用。

  • 強大的篩選、排序和分組功能。

  • 使用各種資料來源和格式之資料時的一致模型。

支援 LINQ 的 C# 語言加強功能

下面是加入至 C# 3.0 以支援 LINQ 的一些新語言結構:

語言結構

說明

查詢運算式

宣告式查詢語法,用來向任何啟用 LINQ 的資料來源查詢資料。如需詳細資訊,請參閱 LINQ 查詢運算式 (C# 程式設計手冊)支援 LINQ 的 C# 3.0 功能

隱含型別變數

使用 var 修飾詞 (Modifier) 指定的變數,可以讓編譯器推斷該變數的型別。如需詳細資訊,請參閱 隱含型別區域變數 (C# 程式設計手冊)支援 LINQ 的 C# 3.0 功能

物件初始設定式

可進行物件的初始化,而不需要明確呼叫物件的建構函式 (Constructor)。如需詳細資訊,請參閱物件和集合初始設定式 (C# 程式設計手冊)支援 LINQ 的 C# 3.0 功能

匿名型別

可讓編譯器建立物件,而不需要指定具名資料型別。只有編譯器才知道型別名稱。如需詳細資訊,請參閱匿名型別 (C# 程式設計手冊)支援 LINQ 的 C# 3.0 功能

擴充方法

將靜態 (Static) 方法關聯至現有型別,以擴充任何現有的型別。如需詳細資訊,請參閱支援 LINQ 的 C# 3.0 功能

Lambda 運算式

內嵌 (Inline) 的運算式或陳述式區塊,可以在需要委派 (Delegate) 型別時使用。

如需詳細資訊,請參閱 Lambda 運算式 (C# 程式設計手冊)支援 LINQ 的 C# 3.0 功能

撰寫 LINQ 查詢

不論使用 ADO.NET 資料集、SQL 資料庫、.NET 集合還是 XML 文件,LINQ 查詢運算式的基本結構都相同。在「查詢運算式」(Query Expression) 中,首先會是 from 子句,接著就是 where、orderby、select 等查詢子句。完整的運算式會儲存在查詢變數中,而您可以不限次數地執行或修改這個查詢變數。查詢運算式語法與 SQL 語法類似。例如,您可以使用下列語法撰寫 LINQ 查詢,傳回 students 資料庫中所有主修 science 的學生:

IEnumerable<Student> studentQuery =

from student in studentApp.students

where student.Major == "Science"

select student;

若要進一步了解查詢運算式,請參閱基本查詢作業 (LINQ)LINQ 查詢簡介逐步解說:使用 C# 撰寫查詢 (LINQ)

LINQ to Objects

LINQ to Objects 一詞指的是使用 LINQ 來查詢記憶體中資料集合,如 System.CollectionsSystem.Collections.Generic 命名空間 (Namespace) 中的類別。這些類別包括 ArrayListList<T>Dictionary<K,T> 等等。因為陣列會隱含地支援 IEnumerable<T>,所以您可以查詢陣列。如需詳細資訊,請參閱 LINQ to Objects

您甚至可以將文字檔匯入至可列舉的資料結構,然後執行查詢來篩選或排序它的內容。如需範例,請參閱 HOW TO:統計某個字在字串中出現的次數 (LINQ)

LINQ to SQL

您可以使用 LINQ to SQL,透過以 O/R 設計工具建立的強型別物件層來存取 SQL Server 和 SQL Server Express 資料庫。

您可以使用 O/R 設計工具將 LINQ to SQL 類別對應至資料庫中的資料表,然後撰寫 LINQ 查詢來將資料繫結至應用程式中的控制項。例如,下列 LINQ 查詢會將 LINQ 查詢的結果 (所有美國客戶) 繫結至 DataGridView 控制項的繫結來源。

var CustomersQuery = from customers in northwindSampleDataContext1.Customers
                      where customers.Country == "US"
                      select customers;
customerBindingSource.DataSource = CustomersQuery;

如需詳細資訊,請參閱 LINQ to SQLO/R 設計工具概觀逐步解說:建立 LINQ to SQL 類別 (O/R 設計工具)HOW TO:將 LINQ to SQL 類別加入至專案 (O/R 設計工具)

注意事項:

O/R 設計工具目前不支援 SQL Server Compact 3.5 資料庫。如需如何取得 SQL Server Express Edition 的詳細資訊,請參閱 HOW TO:安裝範例資料庫中的<取得 SQL Server Express Edition>一節。

LINQ to DataSet

DataSet 可用來將資料繫結至應用程式中的控制項。DataSet 可以讓應用程式使用離線 (快取的) 資料或多個資料來源的子集,而不是直接連接至資料庫。而在應用程式上線時,DataSet 的變更就會更新至資料庫。

LINQ to Dataset 會使查詢快取資料的速度比 DataSet 的篩選和排序方法還要快,也比較簡單。如需詳細資訊,請參閱 LINQ to DataSet

LINQ to XML

LINQ to XML 可讓您使用 LINQ 查詢運算式輕鬆地建立和修改 XML 文件,而不需要使用 XPath 或 XQuery。LINQ to XML 是新的記憶體中 XML 程式設計 API,使用的是現代程式設計建構,而不是 W3C 文件物件模型 (DOM)。如需詳細資訊,請參閱 LINQ to XML 與 DOM 之比較LINQ to XMLLINQ to XML 類別概觀

請參閱

概念

使用者入門 (LINQ to SQL)

其他資源

使用 C# 撰寫 LINQ 入門

使用者入門 (LINQ to DataSet)

使用者入門 (LINQ to XML)