这是拉姆达吗?如果不是,那是什么?

Is this lambda? if not what is it?

几天前,我正在尝试来自 Devart 的新 ORM delphi,称为 EntityDAC,我正在阅读特定于 LINQ 部分的文档,当我看到类似以下内容时:

Linq.From(Emp).Where(Emp['Sal'] > 1000)

不得不说,我第一眼看到它就把我叫醒了。表达式 "Emp['Sal'] > 1000" 不是 lambda 表达式?!因为试用版是这个组件,所以我无法弄清楚 function/procedure 是如何声明的。

参考:http://www.devart.com/entitydac/docs/ -> Linq 查询 -> Linq 语法 -> 向下滚动到 Where session

I mentioned this in a blog post a few months ago.我没有来源可看,但几乎可以肯定是这样完成的:

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