У меня есть следующий запрос в nHibernate. Идея состоит в том, чтобы получить первое и последнее время измерения определенной группы данных.Оптимизация запроса min & max в nHibernate
var measurements = _session.Query<Measurement>()
.Where(x => categories.Contains(x.CategoryId));
first = measurements.Min(o => o.StartTime);
last = measurements.Max(o => o.StartTime);
The SQL Server Profiler дает следующий результат:
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? Это против вашей религии или чего-то еще? –
Для меня HQL почти такой же, как для записи SQL, и я думаю, что вы теряете удобочитаемость, IntelliSense и всю точку использования ORM (которая является отношениями отображения). – Tx3
Я должен признать, что иногда вам приходится делать что-то более низкоуровневым способом (например, HQL). Может быть, это такой случай? Но я хотел бы заставить людей думать иначе, чем HQL. – Tx3