2009-07-22 18 views
8

NHibernateでグリップを開始しました。私はテーブルからすべてのレコードを選択するクエリを実行しようとしていますが、IDの除外フィルタのリスト、例えば。これらのID値を持つ商品以外の商品をすべて手に入れてください。NHibernate - ICriteriaを使用して "NOT IN"クエリを実装します

通常、直接T-SQLでは、NOT IN句のように除外するIDを渡します。

SELECT * 
FROM Products 
WHERE ProductId NOT IN (1,5,9,23,45) 

ICriteriaまたはHQL(ただしICriteriaが望ましい)を使用してNHibernateでこれを行うにはどうすればよいですか?

答えて

23

、完璧に働いている、恐ろしい感謝を

.Add(Expression.Not(Expression.In("ProductID", new int[] { 1, 5, 9, 23, 45 }))) 
+0

を試してみてください。ここに私が実装を完了した完全なコードです... query.Add(Expression.Not( "ProductType.Id"、excludedProductTypeIds.ToArray())))); 「Not」と「In」メソッドを見ましたが、そのようにチェーン化するとは考えていませんでした。 –

+0

でも、ORとANDコマンドでも同じことができます。 –

+0

他のSQLダイアレクト/エンジンがどのように連携しているかはわかりませんが、SQL Serverのクエリパラメータの制限は2100項目です。NHibernateはIN文にパラメータを設定し、excludedProductTypeIdsが2100を超えると失敗します。 –

関連する問題