




Да и нет. LINQ действительно можно рассматривать как два разных элемента.
Первый - это синтаксис SQL-подобных запросов. Это то, что позволяет вам написать на C# следующее.
var query = from it in "foobar" select Char.ToUpper(it);
Чтобы delphi могла использовать эту версию LINQ, необходимо добавить явную поддержку синтаксиса. AFAIK этого не существует.
Однако под капотом все запросы LINQ преобразуются в набор выражений запросов. Обычно они включают интенсивное использование лямбда-выражений и замыканий. Приведенный выше код эквивалентен следующей версии синтаксиса, отличной от SQL.
var query = "foobar".Select(x => Char.ToUpper(x));
Я не знаю уровня поддержки лямбда-выражения или делегата в Delphi, но доступ к LINQ в этом методе должен быть возможен из Delphi.
Delphi 2009 имеет поддержку дженерики, помощники класса и анонимный метод, но не поддерживает лямбда, методы расширения или вывод типа. Лямбда-выражения, вероятно, появятся в будущей версии Delphi, но их еще нет в официальной дорожной карте (мы надеемся, что скоро появится новая). Также Delphi для Win32 не имеет доступа ко всем библиотекам LINQ.
Итак, краткий ответ - НЕТ, вы не можете использовать LINQ в Win32 Delphi. Как бы то ни было, вы можете делать что-то подобное, и вы можете технически даже получить доступ к LINQ через COM (как вы можете с любыми классами .NET), но это как бы побеждает точку без классного синтаксиса LINQ.
LINQ - это действительно технология .NET. Хотя Delphi, скорее всего, разработает языковые функции, которые сделают возможным LINQ, лежащие в основе .NET библиотеки предназначены только для разработки .NET.
Я бы предложил использовать RemObject Data Abstract или аналогичный.
Ммм ... разве методы расширения и помощники классов не являются двумя именами для одного и того же? Единственная разница в том, что один из них используется в Delphi, а другой - в C#, или есть какие-то важные функции, которые я упускаю?
Помощники класса применяются только к одному классу. Методы расширения немного шире. Они очень похожи, и вы, вероятно, могли бы сделать это с помощью Class Helpers, но для этого потребуется больше кода.
Я не знаю, в какой версии Delphi он появился, но в XE у нас есть «объектные функции», которые могут быть выполнены в виде замыканий или почти одинаковых лямбда-выражений.
Итак, с сегодняшнего дня (26.06.2011) возле возможно иметь LINQ-подобные выражения в Delphi (2-я форма).
Что вы имеете в виду под «объектными функциями»?
- у вас небольшая ошибка, вам нужно заменить «it» на «x». В Delphi Win32 отсутствуют почти все функции, обеспечивающие работу второго примера. Нет VAR. string и char не являются объектами, и у вас нет коротких синтаксических лямда-выражений. Так что если ты сможешь это сделать, это будет намного уродливее.