Visual Basic 9.0 前沿播報·靜態篇(五)查詢包含

來源:互聯網
上載者:User

前面所介紹的Visual Basic 9.0新特性,初衷都是為了迎合.NET Framework新的資料架構——Linq。Linq的一個口號是“讓查詢無處不在”,它將類似SQL的文法強型別地引入到Visual Basic中,而且可以任意組合使用。不要以為只是把資料庫的SQL寫到VB中而已,那樣就太小看Linq了。VB的目標是讓一切包含資料的對象都可以用類SQL查詢,包含資料庫映射對象(DLinq),XML(XLinq),甚至是.NET Framework中的一切集合對象。

我們來看一個例子。假如Employee類有FirstName,LastName和Age等屬性。現在有一個List(Of Employee)類型的集合叫做emp。假設我們要查詢所有Age大於25的員工的姓名。回憶一下前面我們介紹的特性怎麼給查詢帶來新的變化。首先我們給IEnumerable增加擴充方法Where:

<Extension()> _Public Function Where()Function Where(Of T)([Me] As IEnumerable(Of T), predicate As Func(Of T, Boolean))_As IEnumerable(Of T)Dim result As New Collection(Of T)For Each Dim item In [Me]If predicate(item) Then result.Add(item)NextReturn resultEnd Function

注意Func,這是.NET Framework將會增加的一組泛型委派之一,用於On-the-fly建立各種參數個數和類型的委託,而不必聲明新的委託類型。這裡Func用於表示一個斷言。於是我們就把條件查詢封裝了。與此同時,我們還可以封裝一個Select方法,用於資料類型轉換,以此類推,還可以有OrderBy和GroupBy等等……這些就成為Linq的查詢算符。

回憶一下,我們還有嵌套函數,於是可以按下列方法使用查詢算符:

Function F()Function F(obj As Employee)As BooleanReturn obj.Age > 25End FunctionDim result = emp.Where(AddressOf F)

這裡稍顯麻煩的就是,我們需要自己定義函數,這樣進行複雜查詢就會寫得很累,即使可能會有Lambda運算式協助,我們也希望尋求更容易理解的方法,那就是查詢包含Query Comprehension。新引入的Select,Where等查詢關鍵字可以幫你完成前面介紹的一整套內容:

Dim result = Select It From e In emp Where e.Age > 25

一個簡單的類似SQL的文法就協助你產生了匿名的嵌套函數和所有算符的調用。注意It的用法,Select It就表示選擇所有欄位。我們只需要Employee的名字,那麼就可以這樣寫:

Dim result = Select e.FirstName, e.LastName From e In emp Where e.Age > 25

這樣,Select語句就會把查詢的結果轉化成一個Tuple(匿名型別的執行個體),它僅包含你所需要的欄位。慢慢你就會發現,查詢包含的威力可以延伸到你所能接觸到的一切資料。這種關係型的文法很快就會代替For Each的手工迭代工作。

我們知道VB9將在XML方面有卓越的改進,當XML literal、XML後期綁定與查詢包含的文法結合在一起後,將體現出非凡的簡潔和高效,這是C# 3.0等同期語言無法比擬的,我們介紹到XML特性後再繼續介紹。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.