Подтвердить что ты не робот

LINQ в win32 DELPHI

Можно ли использовать LINQ в приложениях win32 DELPHI

4b9b3361

Ответ 1

В Delphi 2009 есть generics, помощники класса и анонимный метод, но не lambda, методы расширения или вывод типа. Лямбда-выражения, вероятно, появятся в будущей версии Delphi, но пока они не находятся на официальной дорожной карте (новый должен скоро появиться). Также Delphi для Win32 не имеет доступа ко всем библиотекам LINQ.

Итак, короткий ответ NO, вы не можете делать LINQ в Win32 Delphi. Вы можете как-то сделать некоторые подобные вещи, и вы можете технически даже получить доступ к LINQ через COM (как вы можете это сделать с любыми .NET-классами), но это вроде бы победит точку без крутого синтаксиса LINQ.

LINQ - это действительно технология .NET. Хотя Delphi, скорее всего, разработает языковые функции, которые делают LINQ возможным, базовые библиотеки .NET предназначены только для разработки .NET.

Я бы предложил использовать RemObject Data Abstract или аналогичный.

Ответ 2

Да и № LINQ действительно можно рассматривать как два разных элемента.

Во-первых, синтаксис SQL, подобный запросу. Это позволяет вам написать на С# следующее.

var query = from it in "foobar" select Char.ToUpper(it);

Чтобы использовать эту версию LINQ для delphi, необходимо добавить явную поддержку синтаксиса. AFAIK этого не существует.

Однако под капотом все запросы LINQ переводятся в набор выражений запросов. Обычно это связано с интенсивным использованием лямбда-выражений и замыканий. Вышеприведенный код эквивалентен следующей версии синтаксиса, отличной от SQL.

var query = "foobar".Select(x => Char.ToUpper(x));

Я не знаю уровня поддержки лямбда или делегата в Delphi, но у него должно быть возможно получить доступ к LINQ в этом методе из Delphi.

Ответ 3

Я не знаю, в какой версии Delphi он появился, но в XE у нас есть "функции объекта", которые можно сделать закрытием или близкими лямбда-выражениями.

Итак, на сегодняшний день (26/06/2011) почти возможно иметь LINQ-подобные выражения в Delphi (вторая форма).