Implementar “onde não existe” com o NHibernate QueryOver
Usando o novoQueryOver
API no NHibernate, preciso fazer algo equivalente a:
select c.*
from Category c
where not exists (
select *
from CategoryProduct cp
where cp.CategoryID = c.Id
and cp.ProductID = 'DogFood'
)
Em outras palavras: "Dê-me todas as categorias que não contêm comida de cachorro".
Meu pensamento inicial era algo como:
IEnumerable<Category> FindCategoriesWithoutProduct(Product product)
{
return _session
.QueryOver<Category>()
.Where(c => c.Products.Contains(product))
.List();
}
No entanto, isso faz com queNHibernate.Impl.ExpressionProcessor
exploda com uma "chamada de método não reconhecida" emSystem.Collections.Generic.ICollection<T>.Contains()
.
Suponho que deve haver outra maneira de fazer isso, provavelmente envolvendo umICriterion
, mas minhas pesquisas aqui e no Google não retornaram nada útil.