3

NHibernate.Linq 返回 IQueryable 给我后期评估。这也可以用 QueryOver 来完成吗?

更新:

我将使用它来定义许多只使用子集的查询。因此,Future 不是解决方案,它将全部执行。

我喜欢 NHibernate.Linq 的 IQueryable (IEnumerable) 返回类型,如果从未使用过,它将永远不会执行查询。

4

1 回答 1

7

首先,evenQueryOver只是一组定义,稍后将转换为 SQL 语句。因此,直到您使用对 a 的引用

IQueryOver<Entity, Entity> ab = session.QueryOver<Entity>();

而不是调用List<Entity>()......执行被推迟。这也是您可以使用分离查询16.1 的方式。查询的结构

QueryOver<Cat> query = QueryOver.Of<Cat>()
        .Where(c => c.Name == "Paddy");

另一个强大的功能是Future。这代表了一种非常简单的方法,如何将少量查询放在堆栈上,并且仅当需要其中的第一个时……所有查询都被执行并作为批处理传递给 DB 服务器。在这里阅读更多: NHibernate 期货

它们本质上是一种将查询执行推迟到以后执行的方式,此时 NHibernate 将获得有关应用程序应该做什么的更多信息,并相应地对其进行优化

最大的不同是不能像IQueryable使用时那样返回QueryOver

编辑:扩展问题更新

虽然IQueryable<TEntiy>只能从 a 返回session.Query<TEntity>(),而在使用 QueryOverICriteriaHQL时不能返回......使用QueryOver.

于 2013-01-15T07:56:46.337 回答