Используя новый QueryOver
API в NHibernate, мне нужно сделать что-то эквивалентное:
select c.*
from Category c
where not exists (
select *
from CategoryProduct cp
where cp.CategoryID = c.Id
and cp.ProductID = 'DogFood'
)
Другими словами: «Дайте мне все категории, которые не содержат собачий корм».
Моя первоначальная мысль была похожа на:
IEnumerable<Category> FindCategoriesWithoutProduct(Product product)
{
return _session
.QueryOver<Category>()
.Where(c => c.Products.Contains(product))
.List();
}
Однако из-за этого NHibernate.Impl.ExpressionProcessor
взорвется «неопознанным вызовом метода» на System.Collections.Generic.ICollection<T>.Contains()
.
Я предполагаю, что должен быть какой-то другой способ сделать это, возможно, с использованием ICriterion
, но мои поиски здесь и в Google не дали ничего полезного.