【问题标题】:NHibernate Lambda expressions - are they turned into SQLNHibernate Lambda 表达式 - 它们是否变成了 SQL
【发布时间】:2017-08-22 12:35:03
【问题描述】:

我是一个 NHibernate 新手,我正在编写一些由另一位开发人员编写的代码。我想了解 NHibernate 如何将基于 lambda 的条件转换为 SQL。

我知道在 Linq to SQL 中对查询使用 Lambda 表达式意味着整个事情被 Linq to SQL 提供程序转换为表达式树,然后转换为 SQL(在可能的情况下)。这可以通过执行 DataContext.Log = Console.Out 来看到。

但是如果没有使用 Linq to 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]

... 或者将整个数据集拉入内存并给出一个列表,然后将 lambda 表达式应用于对象。例如

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

我不确定我的导入 NHibernate.LambdaExtensions 是否提供了一种 SQL 转换。

【问题讨论】:

    标签: sql nhibernate lambda


    【解决方案1】:

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

    它不会选择整个表到内存并在那里过滤。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-18
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 2018-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多