我在nHibernate中有一个以下查询。这个想法是获得某个数据组的首次和最后一次测量时间。在nHibernate中优化最小和最大查询
var measurements = _session.Query<Measurement>()
.Where(x => categories.Contains(x.CategoryId));
first = measurements.Min(o => o.StartTime);
last = measurements.Max(o => o.StartTime);
的SQL Server事件探查给出了下面的输出:
exec sp_executesql N'select cast(min(measuremen0_.StartTime) as DATETIME) as col_0_0_ from Measurement measuremen0_ where measuremen0_.Category in (@p0 , @p1)',N'@p0 int,@p1 int',@p0=7654321,@p1=3324673
exec sp_executesql N'select cast(max(measuremen0_.StartTime) as DATETIME) as col_0_0_ from Measurement measuremen0_ where measuremen0_.Category in (@p0 , @p1)',N'@p0 int,@p1 int',@p0=7654321,@p1=3324673
我可以采用某种优化这个不使用HQL,以便它只能创建一个要求到数据库服务器?
为什么没有HQL?这是违背你的宗教或什么的? – 2011-12-30 13:07:50
对我来说,HQL与编写SQL几乎相同,我认为你会失去可读性,智能感知以及使用ORM(即映射关系)的全部观点。 – Tx3 2011-12-30 13:13:05
我不得不承认,有时你必须以更低级别的方式来做事情(如HQL)。也许这是这种情况?但我想推动人们以不同于HQL的方式来思考答案。 – Tx3 2011-12-30 13:15:59