NHibernate.Linq 返回 IQueryable 给我后期评估。这也可以用 QueryOver 来完成吗?
更新:
我将使用它来定义许多只使用子集的查询。因此,Future 不是解决方案,它将全部执行。
我喜欢 NHibernate.Linq 的 IQueryable (IEnumerable) 返回类型,如果从未使用过,它将永远不会执行查询。
NHibernate.Linq 返回 IQueryable 给我后期评估。这也可以用 QueryOver 来完成吗?
更新:
我将使用它来定义许多只使用子集的查询。因此,Future 不是解决方案,它将全部执行。
我喜欢 NHibernate.Linq 的 IQueryable (IEnumerable) 返回类型,如果从未使用过,它将永远不会执行查询。
首先,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>()
,而在使用 QueryOver、ICriteria、HQL时不能返回......使用QueryOver
.