2011-12-30 9 views
2

私はnHibernateで次のクエリを持っています。アイデアは特定のデータグループの最初と最後の測定時間を取得することです。nHibernateのmin&maxクエリの最適化

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を使用せずに、このを最適化することはできますか?

+0

なぜHQLはありませんか?それはあなたの宗教か何かに対して反対ですか? –

+0

私の場合、HQLはSQLを書くのとほとんど同じですが、読みやすさ、IntelliSense、ORM(マッピング関係)を使用している点全体を失うと思います。 – Tx3

+0

私は、時にはより低レベルの方法で(HQLのように)行う必要があることを認めなければなりません。多分これはそういう場合でしょうか?しかし、私は人々にHQL以外の方法で答えを考えるように促したいと思っています。 – Tx3

答えて

3

Future Queriesを見ましたか?私はlinqクエリのためにも動作すると思います。

+1

私はそれを調べて、それがいくつかの最大と最小と組み合わせることができることを教えてください – Tx3

+0

先物はあなたにデータベースへの往復を保存しますが、あなたにクエリを保存しません。問題ではありません。 – Hace