3

NHibernate.Linq は IQueryable を返し、評価が遅れます。これは QueryOver でも実行できますか?

アップデート:

これを使用して、サブセットのみが使用される多くのクエリを定義します。したがって、Future はそれらすべてを実行するソリューションではありません。

私は、NHibernate.Linq からの IQueryable (IEnumerable) 戻り値の型が好きです。これは、使用されなければクエリを実行しません。

4

1 に答える 1

7

まず、evenQueryOverは、後で SQL ステートメントに変換される一連の定義にすぎません。したがって、への参照を使用して作業するまでは

IQueryOver<Entity, Entity> ab = session.QueryOver<Entity>();

呼び出していないList<Entity>()...実行は延期されます。これは、デタッチされたクエリ16.1を使用する方法でもあります。クエリの構造

QueryOver<Cat> query = QueryOver.Of<Cat>()
        .Where(c => c.Name == "Paddy");

もう 1 つの強力な機能は、Future. これは、スタックにいくつかのクエリを配置する非常に簡単な方法を表しており、最初のクエリが必要な場合にのみ...すべてが実行され、バッチとして DB サーバーに渡されます。詳細はこちら: NHibernate Futures

それらは基本的に、クエリの実行を後日に延期する方法として機能し、その時点でNHibernateはアプリケーションが何をすべきかについてより多くの情報を取得し、それに応じて最適化します

IQueryable最大の違いは、使用時のように返品できないことです。QueryOver

編集:質問の更新を拡張する

QueryOver 、ICriteriaHQLを使用する場合で IQueryable<TEntiy>はなく、 からのみ返される可能がありますが、 を使用する場合は同じ動作に到達できませんでした。session.Query<TEntity>()QueryOver

于 2013-01-15T07:56:46.337 に答える