ОБЩАЯ ИНФОРМАЦИЯ:
- У меня есть таблицы 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.
Предложения?
having
? Вы можете использовать подзапрос в том месте, где например...where 1 = (select count(distinct sizes) from...
- person dotjoe   schedule 11.11.2011