2011-06-29 23 views
13

Again, sólo por curiosidad:Las diferencias en la sintaxis de LINQ entre VB.Net y C#

Después de haber programado varios proyectos en VB.Net I para mi sorpresa descubrió que hay algunas diferencias sutiles entre más de C# y Uso de VB.NET LINQ. Por ejemplo, si queremos elementos del grupo por varias propiedades (columnas) que necesitamos para crear un nuevo tipo anónimo de forma explícita:

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

mientras que en VB.NET sintaxis más sencilla ya hará:

Por lo tanto, no es necesario crear un tipo con "nuevo" aquí.

¿Cuáles son las otras diferencias? ¿Hay alguna buena comparación entre la sintaxis LINQ en C# y VB.NET?

Respuesta

15

Hay algunas diferencias, que yo sepa, sobre todo que LINQ de VB.NET tiene algunas joyas ocultas:

  1. No explícitamente relacionado con LINQ, pero VB.NET admite el modificador Key en tipos anónimos. Esto le permite definir qué propiedades en el tipo anónimo se utilizan al comparar tipos anónimos. Por lo que puedo decir con C#; usa todo. Aquí es donde VB.NET tiene una ventaja real.
  2. VB.NET admite la operación Skip como palabra clave: Dim returnCustomers = From a In list Skip numToSkip Select a Puede hacerlo en C#; pero tiene que ser a través del método de extensión, no hay azúcar sintáctico.
  3. VB.NET LINQ también admite Skip While: From a In list Skip While someCondition Select a Nuevamente, C# puede hacer esto; pero solo a través del método de extensión.
  4. y 4.5 .: El mismo que 2 & 3 excepto con Take y Take While
  5. La palabra clave Select es opcional en VB.NET. Si desea seleccionar lo que es actual; entonces eso funciona bien: Dim shortWords = From l In list Where l.Length < 10 en C#; Se requiere la selección de parte: var shortWords = from l in list where l.Length < 10 select l

Esas son las "características" de LINQ adicionales de VB.NET que yo sepa.

Por ejemplo; con C#:

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

Y en VB.NET

Dim skip10 = From c In Customers Skip 10 

se puede ver la documentación de todas estas aquí: http://msdn.microsoft.com/en-us/library/ksh7h19t(v=VS.90).aspx

+1

Entonces, si entiendo bien, hay más métodos de extensión LINQ en VB.La red se puede escribir usando sintaxis similar a la del operador en comparación con C# (como en lugar de escribir '(...). Saltar()' se escribe simplemente 'Omitir' en el medio de la consulta LINQ. ¡Qué bueno, gracias! –

+1

@ Alaudo - sí, parece que VB.NET simplemente tiene más de esto en el mismo idioma. También agregué el # 5 que indica que la parte 'Seleccionar 'no es obligatoria como en C#. – vcsjones

+0

¡Oh, gracias! para agregar algunos ejemplos más! En cuanto a C# y LINQ, hasta donde yo sé, también puede omitir 'select', como' var d = from c en clientes donde c.Age> 18'. ¿Estoy equivocado? –

1

tratar de ver esto:

Visual Basic vs C# LINQ syntax

respecto

+1

Estoy interesado principalmente en las diferencias como las preocupaciones LINQ, el primer eslabón es interesante pero muy corto, es solo una entrada de bloque. Los dos restantes son comparaciones desactualizadas de VB.Net vs. C# y no incluyen ninguna información sobre LINQ. Lástima ... –

Cuestiones relacionadas