LINQ數據源詳細描述
LINQ有很多值得學習的地方,這里我們主要介紹LINQ數據源,包括介紹LINQ查詢表達式等方面。
LINQ數據源
在上一個示例中,由于數據源是數組,因此它隱式支持泛型 IEnumerable<(Of <(T>)>) 接口。這一事實意味著該數據源可以用 LINQ 進行查詢。在 foreach 語句中執行查詢,而 foreach 要求使用 IEnumerable 或 IEnumerable<(Of <(T>)>)。支持 IEnumerable<(Of <(T>)>) 或派生接口(如泛型 IQueryable<(Of <(T>)>))的類型稱為“可查詢類型”。
可查詢類型不需要進行修改或特殊處理就可以用作 LINQ數據源。如果LINQ源數據還沒有作為可查詢類型出現在內存中,則 LINQ 提供程序必須以此方式表示源數據。例如,LINQ to XML 將 XML 文檔加載到可查詢的 XElement 類型中:
- // Create a data source from an XML document.
- // using System.Xml.Linq;
- XElement contacts = XElement.Load(@"c:\myContactList.xml");
在 LINQ to SQL 中,首先手動或使用 對象關系設計器(O/R 設計器) 在設計時創建對象關系映射。針對這些對象編寫查詢,然后由 LINQ to SQL 在運行時處理與數據庫的通信。在下面的示例中,Customer 表示數據庫中的特定表,并且 Table 支持派生自 IEnumerable<(Of <(T>)>) 的泛型 IQueryable<(Of <(T>)>) 接口。
- DataContext db = new DataContext(@"c:\northwind\northwnd.mdf");
有關如何創建特定類型的數據源的更多信息,請參見各種 LINQ 提供程序的文檔。但基本規則非常簡單:LINQ數據源是支持泛型 IEnumerable<(Of <(T>)>) 接口或從該接口繼承的接口的任意對象。
LINQ查詢
查詢指定要從數據源中檢索的信息。查詢還可以指定在返回這些信息之前如何對其進行排序、分組和結構化。查詢存儲在查詢變量中,并用查詢表達式進行初始化。為使編寫查詢的工作變得更加容易,C# 引入了新的查詢語法。
上一個示例中的查詢從整數數組中返回所有偶數。該查詢表達式包含三個子句:from、where 和 select。(如果您熟悉 SQL,您會注意到這些子句的順序與 SQL 中的順序相反。) from 子句指定數據源,where 子句應用篩選器,select 子句指定返回的元素的類型。LINQ查詢表達式(C# 編程指南)一節中詳細討論了這些子句和其他查詢子句。目前需要注意的是,在 LINQ 中,查詢變量本身不執行任何操作并且不返回任何數據。它只是存儲在以后某個時刻執行查詢時為生成結果而必需的信息。有關在幕后是如何構建查詢的更多信息,請參見標準查詢運算符概述。
【編輯推薦】