vb實現LINQ很是簡單的例子:性能
Dim numbers() As Integer = {1, 2, 3, 4, 5, 6, 7} Dim allNumbers = From number In numbers For Each num In allNumbers Console.WriteLine(num & " ") Next
let關鍵字,可讓咱們的linq查詢不僅僅僅返回IEnumberable<T>類型的結果了,一個linq語句能夠添加多個let關鍵字。spa
Public Sub TestLet() Dim numbers() As Integer = {1, 2, 3, 4, 5, 6, 7} 'let關鍵字,容許咱們定義第二個變量,並存儲特定值。本例中,存儲了,是否偶數的判斷 '這意味着,返回值能夠不僅僅只是一個IEnumerable(of T)類型的值了。 Dim myEvens = From number In numbers Let isEven = (number Mod 2 = 0) For Each even In myEvens Console.WriteLine(even.number & " " & even.isEven) Next End Sub
上面的兩個例子,咱們省略了select關鍵字,這意味着咱們使用了默認的select行爲,即,選擇了指定的每一個查詢結果(含let變量),邏輯上等同於select *.使用select關鍵字,咱們能夠選擇或者組合咱們想要的結果。同時從新肯定變量的做用域,由於linq查詢語句只公開select的內容。
Dim customerInfo = From cust In Customers, ord In cust.Orders _ Select myDate = ord.OrderDate, _ name = cust.FirstName & cust.LastName For Each info In customerInfo Console.WriteLine(info.myDate & info.name) Next
上面的例子中,查詢結果均使用了匿名類型。匿名類型容許你能夠在select子句中指定不一樣數量的字段,而無需預先指定,由特定字段組合出來的準確類型。
編譯器會推斷出匿名類型的結構。匿名類型也是強類型的。
查詢聲明實際上不會檢索這些數據;只在執行須要數據的操做時,纔會致使檢索這些數據,這樣你能夠將查詢分紅幾個邏輯部分,而且仍能實現,只要運行一次就能夠獲得結果的性能優點。
可是像count之類的方法,是須要當即執行的。
當即執行demo:
Dim customerInfo = From cust In Customers, ord In cust.Orders _ Select myDate = ord.OrderDate, _ name = cust.FirstName & cust.LastName Dim count = customerInfo.Count
延遲執行demo:
Dim seattleCustomers = From cust In Customers Where cust.City = "Seattle" Dim recentOrders = From ord In orders Where ord.OrderDate.Year = 2012 Dim cusInfos = From cust In seattleCustomers, ord In recentOrders Where cust.CustomerId = ord.CustomerId Select name = cust.LastName & ", " & cust.FirstName, _ cust.CustomerId, ord.OrderDate Order By OrderDate, name '上面LINQ只有在此處運行時,才被執行 For Each custInfo In cusInfos 'take action on the data here Next
參考文章:
http://msdn.microsoft.com/zh-cn/magazine/cc163401.aspx