共用方式為


開啟 LINQ 查詢的數據來源 (Visual Basic)

有各種方式可以擴充 LINQ,讓任何數據源在 LINQ 模式中查詢。 資料來源可能是資料結構、網路服務、檔案系統或資料庫,例如。 LINQ 模式可讓用戶端輕鬆查詢已啟用 LINQ 查詢的數據源,因為查詢的語法和模式不會變更。 LINQ 可以擴充至這些數據源的方式包括:

  • IEnumerable<T> 類型中實作介面,以啟用 LINQ to Objects 查詢該類型。

  • 建立標準查詢運算符方法,例如 WhereSelect 擴充類型,以啟用該類型的自定義 LINQ 查詢。

  • 為您的數據源建立實作 IQueryable<T> 介面的提供者。 實作此介面的提供者會以表達式樹結構的形式接收LINQ查詢,然後可以用自訂的方式執行,例如在遠端。

  • 為您的資料來源建立提供者,以善用現有的 LINQ 技術。 這類提供者不僅可執行查詢,還能進行插入、更新和刪除操作,並處理使用者定義類型的對應。

本主題討論這些選項。

如何啟用數據源的LINQ查詢

In-Memory 數據

有兩種方式可讓您啟用記憶體內部數據的LINQ查詢。 如果資料是實作IEnumerable<T>的類型,您可以使用 LINQ to Objects 查詢資料。 如果透過實作 IEnumerable<T> 介面來啟用類型的列舉並不合理,您可以在該類型中定義 LINQ 標準查詢運算子方法,或建立擴充該類型的 LINQ 標準查詢運算子方法。 標準查詢運算符的自定義實作應該使用延後執行來傳回結果。

遠程數據

啟用遠端資料源 LINQ 查詢的最佳選項是實作 IQueryable<T> 介面。 不過,這與擴充像 LINQ to SQL 這樣用於數據來源的提供者不同。 Visual Studio 2008 中不提供將現有的 LINQ 技術,例如 LINQ to SQL 擴充至其他類型的數據源的提供者模型。

IQueryable LINQ 提供者

IQueryable<T> 作的LINQ提供者在複雜度上可能會有很大的差異。 本節討論不同的複雜度層級。

較不複雜的 IQueryable 提供者可能會與 Web 服務的單一方法進行介接。 這種類型的提供者非常獨特,因為它要求在處理查詢時提供特定資訊。 它有一個封閉式類型系統,或許會公開單一結果類型。 大部分的查詢執行都會在本機發生,例如使用 Enumerable 標準查詢運算符的實作。 較不複雜的提供者可能只會檢查表達式樹狀結構中代表查詢的一個方法呼叫表達式,並讓其他位置處理查詢的其餘邏輯。

IQueryable中度複雜度提供者可能會以具有部分表達查詢語言的數據源為目標。 如果以 Web 服務為目標,它可能會與一個以上的 Web 服務方法介面,並根據查詢所構成的問題選取要呼叫的方法。 中度複雜度提供者的型別系統比簡單提供者更豐富,但它仍然是固定類型系統。 例如,提供者可能會公開具有可以遍歷之一對多關聯性的型別,但不會提供使用者定義型別的映射技術。

複雜的 IQueryable 提供者,例如 LINQ to SQL 提供者,可能會將完整的 LINQ 查詢翻譯為表達性查詢語言,例如 SQL。 複雜提供者比較不複雜的提供者更普遍,因為它可以處理查詢中更廣泛的問題。 它也具有開放式類型系統,因此必須包含廣泛的基礎結構,才能對應使用者定義型別。 開發複雜的供應商需要大量的努力。

另請參閱