NHibernate.Linq返回IQueryable给了我较晚的评价。这可以用QueryOver完成吗?
更新:
我将用它来定义许多只使用子集的查询。因此,未来不是解决方案,它将全部执行它们。
我喜欢NHibernate.Linq中的IQueryable(IEnumerable)返回类型,如果从未使用过,它将永远不会执行查询。
答案 0 :(得分:7)
首先,偶数QueryOver
只是一组定义,稍后将转换为SQL语句。因此,在您使用
IQueryOver<Entity, Entity> ab = session.QueryOver<Entity>();
而不是调用List<Entity>()
...执行被推迟。这也是你如何使用分离查询16.1. Structure of a Query
QueryOver<Cat> query = QueryOver.Of<Cat>()
.Where(c => c.Name == "Paddy");
另一个强大功能是Future
。这代表了一种非常简单的方法,即如何在堆栈上放置少量查询,并且只有在需要第一个查询时...才会执行所有查询并作为批处理传递给DB Server。在这里阅读更多:NHibernate Futures
它们本质上是一种将查询执行推迟到以后的方法 日期,此时NHibernate会有更多关于什么的信息 该应用程序应该做,并相应地优化它
最大的区别在于,使用IQueryable
QueryOver
返回
编辑:扩展问题更新
虽然IQueryable<TEntiy>
只能从session.Query<TEntity>()
返回,而不能在使用 QueryOver , ICriteria , HQL 时返回...使用QueryOver
时无法达到相同的行为。