LINQ 和 ADO.NET

現今許多商務程式開發人員必須使用兩種 (或多種) 程式語言:適用於商務邏輯層與展示層的高階語言 (例如 Visual C# 或 Visual Basic),以及與資料庫互動的查詢語言 (例如 Transact-SQL)。 因此,開發人員必須精通許多語言才能具有效率,而且也會在開發環境中產生語言不符的情況。 例如,使用資料存取 API 針對資料庫執行查詢的應用程式會使用引號,將查詢指定成字串常值 (String Literal)。 編譯器無法讀取這個查詢字串,而且不會檢查是否有錯誤,例如,語法無效,或其所參考的資料行或資料列是否實際存在。 此外,系統無法提供查詢參數的型別檢查和 IntelliSense 支援。

Language-Integrated Query (LINQ) 可讓開發人員在其應用程式程式碼中撰寫集合型查詢,而不需要使用個別的查詢語言。 您可以針對各種可列舉的資料來源 (亦即,實作 IEnumerable 介面的資料來源) 撰寫 LINQ 查詢,而這些資料來源包括記憶體中資料結構、XML 文件、SQL 資料庫和 DataSet 物件。 雖然這些可列舉的資料來源是以各種不同的方式實作,但是它們全部都會公開 (Expose) 相同的語法和語言建構。 由於您可以用程式語言本身來撰寫查詢,因此不需要使用另一種查詢語言,進而內嵌為編譯器無法了解或驗證的字串常值。 此外,將查詢整合至程式語言也會透過提供編譯時間型別和語法檢查以及 IntelliSense,提升 Visual Studio 程式設計人員的產能。 這些功能會減少查詢偵錯和錯誤修正的需要。

將資料從 SQL 資料表傳輸至記憶體中物件通常很費時而且容易產生錯誤。 LINQ to DataSet 和 LINQ to SQL 所實作的 LINQ 提供者會將來源資料轉換成 IEnumerable 型物件集合。 當您查詢和更新時,程式設計人員永遠會將資料視為 IEnumerable 集合。 針對這些集合撰寫查詢可獲得完整的 IntelliSense 支援。

有三個個別的 ADO.NET Language-Integrated Query (LINQ) 技術:LINQ to DataSet、LINQ to SQL 和 LINQ to Entities。 LINQ to DataSet 可提供更豐富且最佳化的 DataSet 查詢、LINQ to SQL 可讓您直接查詢 SQL Server 資料庫結構描述,而 LINQ to Entities 可讓您查詢實體資料模型。

下圖將提供 ADO.NET LINQ 技術如何與高階程式語言和啟用 LINQ 之資料來源相關聯的概觀。

LINQ to ADO.NET overview

如需 LINQ 的詳細資訊,請參閱 Language Integrated Query (LINQ)

下列各節提供 LINQ to DataSet、LINQ to SQL 和 LINQ to Entities 的詳細資訊。

LINQ to DataSet

DataSet 是用來建置 ADO.NET 之已中斷連線程式設計模型的重要元素,而且廣為業界所使用。 LINQ to DataSet 可讓開發人員使用適用於許多其他資料來源的相同查詢編寫機制,在 DataSet 中建立更豐富的查詢功能。 如需詳細資訊,請參閱 LINQ to DataSet

LINQ to SQL

針對不需要對應至概念模型的開發人員而言,LINQ to SQL 是很有用的工具。 使用 LINQ to SQL,您就可以直接在現有的資料庫結構描述上使用 LINQ 程式設計模型。 LINQ to SQL 可讓開發人員產生可表示資料的 .NET Framework 類別。 然後,這些產生的類別會直接對應至資料庫資料表、檢視、預存程序 (Stored Procedure) 和使用者定義函式,而非對應至概念性資料模型。

透過 LINQ to SQL,開發人員就可以使用與記憶體中集合和 DataSet (以及 XML 等其他資料來源) 相同的 LINQ 程式設計模式,直接針對儲存結構描述撰寫程式碼。 如需詳細資訊,請參閱 LINQ to SQL

LINQ to Entities

目前大部分應用程式都是根據關聯式資料庫所撰寫而成。 同時,這些應用程式將必須與關聯式格式表示的資料互動。 但是,資料庫結構描述不一定適合建立應用程式,而且應用程式的概念模型與資料庫的邏輯模型有所不同。 實體資料模型是可用於針對特定定義域資料建立模型的概念資料模型,讓應用程式能夠將資料當做物件進行互動。 如需詳細資訊,請參閱 ADO.NET Entity Framework

透過實體資料模型,關聯式資料會公開為 .NET 環境內的物件。 如此一來,物件層就成為理想的 LINQ 支援目標,讓程式開發人員可以根據用於建置商務邏輯的語言,針對資料庫編寫查詢。 這項功能稱為 LINQ to Entities。 如需詳細資訊,請參閱 LINQ to Entities

另請參閱