4
可以編譯NHibernate linq/lambda表達式,以便在每次使用時不重新評估它們嗎?編譯NHibernate Linq表達式
可以編譯NHibernate linq/lambda表達式,以便在每次使用時不重新評估它們嗎?編譯NHibernate Linq表達式
將它們編譯成代碼會使它們在內存中執行,這是你絕對不想要的。
它們必須保留爲表達式樹才能被解析爲Criteria表達式(2.x contrib provider)或HQL樹(3.x provider),然後分析到SQL中。
爲什麼它會讓它們在內存中執行?如果所有參數都正確提交給代理人,則不應該這樣做。 – 2010-08-30 02:39:48
通過「編譯」,我明白調用「Expression.Compile()'。這樣做後,你不再有表達樹;你有MSIL。而且,除非您反編譯MSIL(不太可能),否則您無法將其轉換爲用於服務器端執行的SQL。 –
2010-08-30 03:07:37
@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