VB.Net和C#之间LINQ语法的差异

时间:2011-06-29 02:06:47

标签: c# vb.net linq c#-to-vb.net

Again,只是出于好奇:

在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中,更直接的语法已经可以做到:

Dim b = From c In Process.GetProcesses()
        Group c By c.BasePriority, c.Id Into Group
        Select Group

因此,人们不需要在这里创建一个带有“new”的类型。

其他差异是什么? C#和VB.NET中的LINQ语法有什么好的比较吗?

2 个答案:

答案 0 :(得分:17)

我知道有一些差异,主要是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. 之外
  6. 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
  7. 这些是我所知道的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 :(得分:1)

试着看看这个:

Visual Basic vs C# LINQ syntax

问候