Delphi 这是兰姆达吗?如果不是,是什么?

Delphi 这是兰姆达吗?如果不是,是什么?,delphi,orm,devart,Delphi,Orm,Devart,几天前,我在尝试Devart提供的名为EntityDAC的delphi新ORM,当时我正在阅读LINQ部分的文档,当时我看到了如下内容: Linq.From(Emp).Where(Emp['Sal'] > 1000) 我要说的是,我第一眼看到它就叫醒了我。表达式“Emp['Sal']>1000”不是lambda表达式?!由于试用版是免费的,所以这个组件没有源代码,我无法确定函数/过程是如何声明的 参考:->Linq查询->Linq语法->向下滚动到会话所在的位置我没有要查看的源代码,但几

几天前,我在尝试Devart提供的名为EntityDAC的delphi新ORM,当时我正在阅读LINQ部分的文档,当时我看到了如下内容:

Linq.From(Emp).Where(Emp['Sal'] > 1000)
我要说的是,我第一眼看到它就叫醒了我。表达式“Emp['Sal']>1000”不是lambda表达式?!由于试用版是免费的,所以这个组件没有源代码,我无法确定函数/过程是如何声明的

参考:->Linq查询->Linq语法->向下滚动到会话所在的位置

我没有要查看的源代码,但几乎可以肯定是这样做的:

  • 表达式
    Emp['Sal']
    返回
    记录类型的值
  • 此记录上声明了运算符重载
  • Delphi语言将运算符重载定义为函数,不要求它们返回任何指定的或直观的类型。因此,这里的
    运算符不返回布尔值,而是返回另一条记录
  • 通过链接这些操作符,可以创建一个表达式树,它可以由它们的LINQ计算器进行计算

我认为这不可能是Pascal,因为
Emp['Sal']>1000
表达式将在调用
Where
之前进行计算。为什么不问问Devart?EntityDAC可用于.net和delphi,尤其是linq部分是不同的。但也有一章,我想你必须用它delphi@DavidHeffernan操作符重载呢?难道你不能在操作符重载代码中建立一个值列表,然后在where中使用这个列表吗?您实际上返回了一个未使用的结果。@是的,我想是这样。正如梅森概述的那样。@StefanGlienke:;)谢谢你的注意,我不知道delphi有这个功能。我一定会看得更远