2010-08-30 70 views

回答

4

將它們編譯成代碼會使它們在內存中執行,這是你絕對不想要的。

它們必須保留爲表達式樹才能被解析爲Criteria表達式(2.x contrib provider)或HQL樹(3.x provider),然後分析到SQL中。

+0

爲什麼它會讓它們在內存中執行?如果所有參數都正確提交給代理人,則不應該這樣做。 – 2010-08-30 02:39:48

+0

通過「編譯」,我明白調用「Expression .Compile()'。這樣做後,你不再有表達樹;你有MSIL。而且,除非您反編譯MSIL(不太可能),否則您無法將其轉換爲用於服務器端執行的SQL。 – 2010-08-30 03:07:37

+0

@Diego Mijelshon:是的,你說得對。不過,原則上應該可以爲NH linq查詢構建一個預編譯器,就像System.Data.Linq的CompiledQuery(http://msdn.microsoft.com/en-us/library/bb548737.aspx)一樣,它需要一個表達並返回一個委託。只是它不像'Expression .Compile()'那麼微不足道。 – 2010-08-30 04:23:13