2009-01-03 76 views

回答

16

德爾福2009年有泛型類傭工匿名方法支持,但不拉姆達擴展方法類型推斷。 Lambda表達式可能會在德爾福的未來版本中出現,但它們尚未出現在官方的路線圖中(希望新的版本即將推出)。 Delphi for Win32也無法訪問所有的LINQ庫。

那麼簡單的答案是否定的,你不能在Win32的德爾福做LINQ。你可以做一些類似的事情,你甚至可以在技術上甚至通過COM訪問LINQ(就像你可以使用任何.NET類一樣),但是如果沒有很酷的LINQ語法,它就會失敗。

LINQ實際上是一種.NET技術。雖然Delphi很可能會開發使LINQ成爲可能的語言特性,但底層的.NET庫僅用於.NET開發。

我會建議使用RemObject Data Abstract或相似。

+0

呃...不是擴展方法和類助手兩個名稱完全相同的東西?唯一的區別是它們中的一個在Delphi中使用,另一個在C#中使用,或者是否存在我忽略的一些關鍵功能? – 2009-01-05 14:42:04

3

Yes和No. LINQ真的可以被看作是兩個不同的項目中使用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或delegate支持的級別,但應該可以從Delphi中訪問此方法中的LINQ。

+2

- 您有一個小錯誤,您需要用「x」替換「it」。 Delphi Win32幾乎沒有任何使第二個例子工作的技術。沒有VAR。字符串和字符不是對象,並且您沒有短語法lamda表達式。 所以如果你能做到的話,那將會是一件很醜陋的事。 – 2009-01-04 00:50:54

+0

@mliesen,謝謝修正了錯字。 – JaredPar 2009-01-04 00:51:50

1

我不知道是什麼版本的Delphi它一出現,但在XE我們有可製成閉合或接近相等lambda表達式「目標函數」。

因此,從今天開始(26/06/2011)在附近是可能在Delphi(第二種形式)中具有類似LINQ的表達式。