0
私の状況は次のとおりです。多対多の関係を持つエンティティがあります。製品とカテゴリ。また、カテゴリには木のような階層構造があります。すべての子(ブランチ)で特定のカテゴリに依存するすべての製品を選択する必要があります。だから、私はそれを行うには、次のSQLステートメントを使用します。NHibernate:最適化と動的結合のための値テーブルの使用
SELECT * FROM Products p WHERE p.ID IN ( SELECT DISTINCT pc.ProductID FROM ProductsCategories pc INNER JOIN Categories c ON c.ID = pc.CategoryID WHERE c.TLeft >= 1 AND c.TRight <= 33378 )
しかし、データの大きなセットでこのクエリは非常に長く実行し、私はそれを最適化するためにいくつかの解決策を見つけ、ここを見て:
をDECLARE @CatProducts TABLE ( ProductID int NOT NULL ) INSERT INTO @CatProducts SELECT DISTINCT pc.ProductID FROM ProductsCategories pc INNER JOIN Categories c ON c.ID = pc.CategoryID WHERE c.TLeft >= 1 AND c.TRight <= 33378 SELECT * FROM Products p INNER JOIN @CatProducts cp ON cp.ProductID = p.ID
このクエリは非常に高速で実行されますが、私はNHIbernateでこれを行う方法がわかりません。動的フィルタリング\注文のためICriteriaのみを使用する必要があることに注意してください。 解決策を知っている人がいれば、それは素晴らしいでしょう。しかし、私はもちろん、どんな提案にも喜ぶでしょう。
が先にありがとう、 のKostya