Using the new QueryOver
API in NHibernate, I need to do something equivalent of:
select c.*
from Category c
where not exists (
select *
Not tested, but something like this
IEnumerable<Category> FindCategoriesWithoutProduct(Product product)
{
CategoryProduct categoryProductAlias = null;
var subQuery = QueryOver.Of<CategoryProduct>(() => categoryProductAlias)
.Select(x => categryProductAlias.ID)
.Where(() => categoryProductAlias.ProductID == "DogFood");
Category categoryAlias = null;
return _session
.QueryOver<Category>(() => categoryAlias)
.WithSubquery.WhereProperty(() => clientAlias.Id).NotIn(subQuery)
.List();
}
I'm just running in the same problem, and possible solution is:
Category aliasCategory = null;
CategoryProduct aliasCategoryProduct = null;
var qcp = QueryOver.Of<CategoryProduct>(() => aliasCategoryProduct)
.Where(() => aliasCategoryProduct.ProductID == "DogFood")
.Where(() => aliasCategory.Id == aliasCategoryProduct.CategoryID)
.DetachedCriteria;
return _session.QueryOver<Category>(() => aliasCategory)
.Where(Subqueries.NotExists(qcp));
It works on my similar criteria.