我知道這是可能創造LINQ像飛鏢表達式,顯示此鏈接:使用dart可以將linq lambda表達式轉換爲SQL嗎?
https://github.com/dartist/101LinqSamples
不過,我想知道是否有可能實現,我們可以得到相同的方法C#和Java8,即。轉換lambda表達式到SQL就像這個鏈接:
https://code.google.com/p/lambda-sql-builder/
我知道這是可能創造LINQ像飛鏢表達式,顯示此鏈接:使用dart可以將linq lambda表達式轉換爲SQL嗎?
https://github.com/dartist/101LinqSamples
不過,我想知道是否有可能實現,我們可以得到相同的方法C#和Java8,即。轉換lambda表達式到SQL就像這個鏈接:
https://code.google.com/p/lambda-sql-builder/
我不相信這是可能的內置方法(如等);而且我不確定你可以在沒有大量工作的情況下自己構建它(和一個變壓器)。
在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問題!
我認爲可以創建一個處理代碼並從中生成SQL的轉換器。但我不希望這很容易。 –