2011-06-29 38 views
13

Again之間LINQ語法,只是出於好奇:差異在VB.Net和C#

後,我已經設定了幾個項目在VB.Net我讓我吃驚的發現,有C#之間有一些超過細微的差別VB.NET LINQ使用。 例如,如果我們想通過多個屬性組元素(列),我們需要明確地創建一個新的匿名類型:

var procs = from c in Process.GetProcesses() 
      group c by new {c.BasePriority, c.Id} into d 
      select d; 

而在VB.NET更簡單的語法就已經做到:

所以,在這裏不需要創建一個帶有「new」的類型。

其他區別是什麼? C#和VB.NET中的LINQ語法有什麼好的比較?

回答

15

有一些區別,我知道的,大部分是VB.NET的LINQ有一些隱藏的寶石:

  1. 不明確LINQ相關,但VB.NET支持匿名類型的Key修飾符。這使您可以在比較匿名類型時定義匿名類型中的哪些屬性。據我可以告訴C#;它使用一切。這是VB.NET具有實際優勢的地方。
  2. VB.NET支持將Skip作爲關鍵字操作: Dim returnCustomers = From a In list Skip numToSkip Select a您可以在C#中執行此操作;但它必須通過擴展方法,沒有語法糖。
  3. VB.NET LINQ也支持Skip WhileFrom a In list Skip While someCondition Select a同樣,C#可以做到這一點;但只能通過擴展方法。
  4. 和4.5 .:同爲2 & 3除與TakeTake While
  5. Select關鍵字是可選的在VB.NET。如果你想選擇什麼是當前的;那麼在C#中工作正常:Dim shortWords = From l In list Where l.Length < 10;選擇部分是必需的:var shortWords = from l in list where l.Length < 10 select l

這些是VB.NET的LINQ的額外「功能」,我知道。

例如;用C#:

var skip10 = (from c in customers select c).Skip(10); 

而在VB.NET

Dim skip10 = From c In Customers Skip 10 

你可以看到文檔所有這些在這裏:http://msdn.microsoft.com/en-us/library/ksh7h19t(v=VS.90).aspx

+1

所以,如果我理解你的話,VB中有更多的LINQ擴展方法。Net可以用類似於運算符的語法寫成,與C#相比(而不是寫'(...)。Skip()'在LINQ查詢的中間只寫了'Skip'。很好,謝謝! –

+1

@ Alaudo - 是的,看起來VB.NET只是將它更多地融入了實際的語言本身,我還添加了#5,它表示「選擇」部分不像C#中那樣是強制性的。 – vcsjones

+0

哦,謝謝添加更多的例子! 至於C#和LINQ,據我所知,你也可以跳過'select',就像'var d = from c在客戶那裏c.Age> 18'。我錯了嗎? –

1

嘗試看看這個:

Visual Basic vs C# LINQ syntax

問候

+1

我作爲關注LINQ,第一個鏈接不同主要興趣很有趣但很短 - 它只是一個塊入口。剩下的兩個是VB.Net與C#的過時比較,並且不包含任何關於LINQ的信息。可惜... –