更新: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.Collections 和 System.Collections.Generic 命名空間 (Namespace) 中的類別。這些類別包括 ArrayList、List<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 SQL、O/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 XML 和 LINQ to XML 類別概觀。
注意事項: