2015-01-13 70 views
7

几天后,我试图在新的ORM德尔福从Devart称为EntityDAC,以及我正在读文档特定的LINQ的一部分,当我看到的东西,如:这是lambda吗?如果不是什么?

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

得说,叫我起床我看到的第一个时刻。表达式“Emp ['Sal']> 1000”不是lambda表达式?!因为试用版本是这个组件没有来源我不知道如何声明Where函数/过程。

参考:http://www.devart.com/entitydac/docs/ - > LINQ查询 - > LINQ的语法 - >向下滚动到会话

+1

我不认为这可能是帕斯卡,因为在调用'Where'之前将会评估Emp ['Sal']> 1000'表达式。你为什么不问Devart? –

+2

EntityDAC可用于.net和delphi,当然特别是linq部分是不同的。但也有一章[指定LINQ查询参数为字符串](http://www.devart.com/entitydac/docs/specify_linq_query_arguments_as_string.htm),我想你必须使用它与delphi –

+1

@DavidHeffernan关于运算符重载?难道你不能通过在运算符重载代码中建立一个值列表然后在那里使用那个列表来完成某些事情吗?您有效地返回未使用的结果。 – Graymatter

回答

12

I mentioned this in a blog post a few months ago.我没有源头上看看,但它几乎肯定做了这种方式:

  • Emp['Sal']返回record类型的值的表达式
  • 此记录已在其上声明操作符重载
  • Delphi语言定义操作符重载如功能,并且不要求它们返回任何指定的或直观的类型。因此,这里的>运算符不返回布尔值,而是返回另一条记录。
  • 通过链接这些运算符,可以创建一个表达式树,可以通过它们的LINQ评估器对其进行评估。
+0

thx为您的关注,我不知道德尔福有这个功能。我一定会看得更远 – kabstergo

相关问题