2011-06-29 40 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的信息。可惜... –