Различия в синтаксисе 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 более простой синтаксис уже будет делать:

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

Таким образом, не нужно создавать тип с "новым" здесь.

Каковы другие различия? Есть ли хорошее сравнение между синтаксисом LINQ в C# и VB.NET?

2 ответа

Решение

Я знаю о некоторых различиях, в основном о том, что в LINQ VB.NET есть некоторые скрытые жемчужины:

  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 While: From a In list Skip While someCondition Select a Опять же, C# может сделать это; но только через метод расширения.
  4. и 4.5.: То же, что 2 и 3, за исключением Take а также Take While
  5. Select Ключевое слово не обязательно в VB.NET. Если вы хотите выбрать, что является текущим; тогда это работает нормально: Dim shortWords = From l In list Where l.Length < 10 в C#; Выберите часть обязательна: var shortWords = from l in list where l.Length < 10 select l

Это дополнительные "особенности" LINQ VB.NET, о которых я знаю.

Например; с 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

Попробуйте посмотреть на это:

Visual Basic против синтаксиса C# LINQ

С уважением

Другие вопросы по тегам