Различия в синтаксисе 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 есть некоторые скрытые жемчужины:
- Не имеет отношения к LINQ, но VB.NET поддерживает
Key
модификатор на анонимных типах. Это позволяет вам определить, какие свойства в анонимном типе используются при сравнении анонимных типов. Насколько я могу сказать с C#; он использует все. Вот где у VB.NET есть реальное преимущество. - VB.NET поддерживает
Skip
операция в качестве ключевого слова:Dim returnCustomers = From a In list Skip numToSkip Select a
Вы можете сделать это в C#; но это должно быть через метод расширения, там нет синтаксического сахара. - VB.NET LINQ также поддерживает
Skip While
:From a In list Skip While someCondition Select a
Опять же, C# может сделать это; но только через метод расширения. - и 4.5.: То же, что 2 и 3, за исключением
Take
а такжеTake While
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