【发布时间】:2009-01-03 23:55:18
【问题描述】:
是否可以在win32 DELPHI应用程序中使用LINQ
【问题讨论】:
是否可以在win32 DELPHI应用程序中使用LINQ
【问题讨论】:
Delphi 2009 支持泛型、类助手和匿名方法,但不支持lambda、扩展方法或类型推断。 Lambda 表达式可能会出现在 Delphi 的未来版本中,但它们还没有出现在官方路线图上(希望很快就会出现一个新的)。此外,Delphi for Win32 无法访问所有 LINQ 库。
所以简短的回答是否定的,你不能在 Win32 Delphi 中执行 LINQ。您可以做一些类似的事情,从技术上讲,您甚至可以通过 COM 访问 LINQ(就像您可以使用任何 .NET 类一样),但是如果没有酷炫的 LINQ 语法,它会有点失败。
LINQ 确实是一种 .NET 技术。虽然 Delphi 很可能会开发使 LINQ 成为可能的语言功能,但底层 .NET 库仅用于 .NET 开发。
我建议使用RemObject Data Abstract 或类似的。
【讨论】:
是的和不是的。LINQ 真的可以被认为是两个不同的项目。
首先是类似 SQL 的查询语法。它允许您在 C# 中编写以下内容。
var query = from it in "foobar" select Char.ToUpper(it);
要让 delphi 使用这个版本的 LINQ,它需要添加显式语法支持。 AFAIK 这不存在。
但在底层,所有 LINQ 查询都被转换为一组查询表达式。这些通常涉及大量使用 lambda 表达式和闭包。上面的代码等价于下面的非SQL语法版本。
var query = "foobar".Select(x => Char.ToUpper(x));
我不知道 Delphi 对 lambda 或委托的支持程度,但应该可以从 Delphi 以这种方法访问 LINQ。
【讨论】:
我不知道它出现在哪个版本的 Delphi 中,但在 XE 中我们有“对象函数”,可以作为闭包或近似相等的 lambda 表达式。
因此,从今天(2011 年 6 月 26 日)开始,在 Delphi(第二种形式)中几乎可以使用类似 LINQ 的表达式。
【讨论】: