バックグラウンド:
- マスター テーブルと詳細テーブル、M と D があります。
- M には注文が含まれ、D にはさまざまなサイズ (S、M、L、XL) のパーツを含む注文の詳細が含まれます。
- 特定の注文には、任意の数の部品が含まれる場合があります。
- すべての注文の 95% に、サイズ S のアイテムが少なくとも 1 つ含まれています。
- 新しい要件は、サイズが将来追加される可能性があるため、SMLXL のリストをハードコーディングすることはもはや機能しません
特定のサイズのパーツのみを含むすべての注文 M のリストを返す nHibernate クエリを探しています。
つまり、サイズ S のパーツのみを含むすべての注文を返し、サイズが混在するすべての注文を除外します。
私が使用していた:
matching_orders.Add(
Expression.Conjunction()
.Add(Subqueries.WhereProperty<Orders>(o => o.OrderId).In(DetailQueryOver(S)))
.Add(Subqueries.WhereProperty<Orders>(o => o.OrderId).NotIn(DetailQueryOver(M)))
.Add(Subqueries.WhereProperty<Orders>(o => o.OrderId).NotIn(DetailQueryOver(L)))
.Add(Subqueries.WhereProperty<Orders>(o => o.OrderId).NotIn(DetailQueryOver(XL)))
もっと良い方法があるはずです。「count(DISTINCT SIZES) = 1」のようなもの
しかし、nHibernate でこれを実装する方法がわかりません。
提案?