2011-06-29 13 views
13

Again, po prostu z ciekawości:Różnice w składni LINQ między VB.NET i C#

Po zaprogramowaniu kilka projektów w Vb.NET I ku mojemu zaskoczeniu odkrył, że istnieją pewne więcej niż subtelne różnice między C# i Wykorzystanie LBB w VB.NET. Na przykład, jeśli chcemy elementów grupie przez wielu właściwości (kolumny) musimy utworzyć nowy typ anonimowy wyraźnie:

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

natomiast w VB.NET składnia prościej będzie już zrobić:

Nie trzeba tutaj tworzyć typu z "nowym".

Jakie są pozostałe różnice? Czy istnieje dobre porównanie składni LINQ w C# i VB.NET?

Odpowiedz

15

Istnieją pewne różnice, które znam, głównie że VB.NET jest LINQ ma pewne ukryte skarby:

  1. Nie jawnie powiązany z LINQ, ale VB.NET obsługuje modyfikator Key dla typów anonimowych. Pozwala to określić, które właściwości w typie anonimowym są używane podczas porównywania typów anonimowych. O ile mogę powiedzieć z C#; wykorzystuje wszystko. Tutaj właśnie VB.NET ma faktyczną przewagę.
  2. VB.NET obsługuje operację Skip jako słowo kluczowe: Dim returnCustomers = From a In list Skip numToSkip Select a Możesz to zrobić w języku C#; ale musi to być metoda rozszerzenia, nie ma cukru syntaktycznego.
  3. VB.NET LINQ obsługuje również Skip While: From a In list Skip While someCondition Select a Ponownie, C# może to zrobić; ale tylko metodą rozszerzenia.
  4. i 4.5 .: Tak samo jak 2 & 3 z wyjątkiem Take i Take While
  5. Select Hasło jest opcjonalne w VB.NET. Jeśli chcesz wybrać, co jest aktualne; to działa dobrze: Dim shortWords = From l In list Where l.Length < 10 w C#; Wymagana jest część Select: var shortWords = from l in list where l.Length < 10 select l

To są dodatkowe "cechy" LINQ VB.NET, o których mi wiadomo.

Na przykład; C#:

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

A w VB.NET

Dim skip10 = From c In Customers Skip 10 

można znaleźć w dokumentacji dla wszystkich tych tutaj: http://msdn.microsoft.com/en-us/library/ksh7h19t(v=VS.90).aspx

+1

Tak więc, jeśli dobrze cię rozumiem, w VB jest więcej metod rozszerzenia LINQ.Sieć może być napisana przy użyciu składni podobnej do operatora w porównaniu do C# (jak zamiast pisania '(...). Pomiń()' jeden pisze właśnie 'Pomiń' w środku zapytania LINQ To miło, dziękuję! –

+1

@ Alaudo - tak, wygląda na to, że VB.NET po prostu ma więcej z tego wypalonego w samym języku. Dodałem też # 5, który wskazuje, że część "Wybierz" nie jest obowiązkowa, tak jak jest w C# – vcsjones

+0

Och, dziękuję dodając kilka przykładów! Jeśli chodzi o C# i LINQ, o ile wiem, można pominąć również 'select', np.' var d = od cw klientach, gdzie c.Age> 18' .Czy się mylę? –

1

spróbować spojrzeć na to:

Visual Basic vs C# LINQ syntax

pozdrowienia

+1

Jestem zainteresowany przede wszystkim różnic jak LINQ, dotyczy pierwszego ogniwa jest interesująca, ale bardzo krótka - to tylko wpis blokowy. Dwie pozostałe są nieaktualnymi porównaniami VB.Net vs. C# i nie zawierają żadnych informacji o LINQ. Szkoda ... –

Powiązane problemy