背景:
- 我有 Master 和 Detail 表,M 和 D;
- M 包含订单,D 包含各种尺寸(S、M、L、XL)零件的订单详情
- 给定的订单可能包含任意数量的部分。
- 95% 的订单至少包含一件尺寸为 S 的商品
- 新要求是将来可以添加尺寸,因此对 SMLXL 列表进行硬编码不再有效
我正在寻找一个 nHibernate 查询,它返回所有订单 M 的列表,其中仅包含特定大小的部分。
换句话说,返回所有仅包含部分尺寸 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 中实现这一点。
建议?