2010-08-30 107 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