2015-01-13 97 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

相關問題