我在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