NHibernate Lambda表达式 - 它们变成了SQL

时间:2010-03-10 14:15:49

标签: sql nhibernate lambda

我是一个NHibernate新手,我正在接受另一个开发人员编写的代码。我想了解NHibernate如何将基于lambda的标准转换为SQL。

我知道在Linq to SQL中使用查询上的Lambda表达式意味着Linq to SQL提供程序将整个事物转换为表达式树,然后转换为SQL(如果可能)。这可以通过DataContext.Log = Console.Out。

来看出

但是如果没有使用Linq到NHibernate的NHibernate标准表达式呢?

导入以下命名空间......

using NHibernate;
using NHibernate.Criterion;
using NHibernate.LambdaExtensions;

..标准代码看起来像这样......

    return Session.CreateCriteria<MyObjectType>()
        .Add<MyObjectType>(x => x.Id == id)
        .UniqueResult<MyObjectType>();

这会变成一个SQL语句,例如

Select distinct * from table where id = [param]

...或者将整个数据集拉入内存,给出List,然后对对象应用lambda表达式。 e.g。

return List<MyObject>.Where(x => x.id = id)  [or something similar].

我不确定导入的NHibernate.LambdaExtensions是否提供了对SQL的一种翻译。

1 个答案:

答案 0 :(得分:1)

首先转向HQL语句(启用日志记录并查看语句的控制台),然后转到SQL并发送到数据库。

它没有选择整个表到内存并过滤那里。