2014-04-04 91 views
2

我知道這是可能創造LINQ像飛鏢表達式,顯示此​​鏈接:使用dart可以將linq lambda表達式轉換爲SQL嗎?

https://github.com/dartist/101LinqSamples

不過,我想知道是否有可能實現,我們可以得到相同的方法C#和Java8,即。轉換lambda表達式到SQL就像這個鏈接:

https://code.google.com/p/lambda-sql-builder/

+1

我認爲可以創建一個處理代碼並從中生成SQL的轉換器。但我不希望這很容易。 –

回答

1

我不相信這是可能的內置方法(如等);而且我不確定你可以在沒有大量工作的情況下自己構建它(和一個變壓器)。

在C#中,在EF使用的Where方法是不一樣的Where方法,你就IEnumerable<T>看,而是在IQueryable<T>擴展方法。該方法的簽名是不同的:

// IEnumerable<T> 
Where<T>(this IEnumerable<T> source,   Func<T, Boolean> predicate) 
// IQueryable<T> 
Where<T>(this IQueryable<T> source, Expression<Func<T, Boolean>> predicate) 

採用Expression是重要的;這意味着該方法獲得有關已傳遞的lambda的附加信息,並且可以從構建SQL中的(受支持的)運算符的表達式中走出。

我不知道Dart中的任何內容會允許類似的表達式分解。鏡子會讓你檢查類型,但我不認爲他們可以檢查任意Dart表達式。

但是,變形金剛可能會有所幫助。獲取文檔的AST並不難,然後沿着特定的「數據庫類型」尋找對where()的調用,然後重寫它們。我懷疑這樣做會涉及到更多的StackOverflow問題!

相關問題