Thanks a lot! This should work, but something is going wrong.
I'm doing this:
Code:
DetachedCriteria numberOfProductsInDepartment = DetachedCriteria.For(typeof(Product), "product")
.SetProjection(Projections.RowCount())
.Add(Expression.EqProperty("product.Department.Number", "department.Number"));
ICriteria criteria = session.CreateCriteria(typeof(Department), "department")
.Add(Subqueries.Lt(0, numberOfProductsInDepartment));
...
criteria.SetFirstResult(0);
criteria.SetMaxResults(NHibernate.Engine.RowSelection.NoValue);
criteria.SetProjection(NHibernate.Expression.Projections.RowCount());
totalCount = criteria.UniqueResult<int>();
and get an NHibernate.ADOException (see below). When I run the query manually (SELECT count(*) as y0_ FROM Department this_ WHERE 0 < (SELECT count(*) as y0_ FROM Product this0__ WHERE this0__.Department = this_.Number)), it works just fine (using Firebird).
Any ideas, what may go wrong?
Tobias
PS: It looks like NH does not replace the "?" in the query with "0".
Code:
NHibernate.ADOException wurde nicht behandelt.
Message="could not execute query\r\n[ SELECT count(*) as y0_ FROM Department this_ WHERE ? < (SELECT count(*) as y0_ FROM Product this0__ WHERE this0__.Department = this_.Number) ]\r\nPositinal Parameters: 0 0\r\n[SQL: SELECT count(*) as y0_ FROM Department this_ WHERE ? < (SELECT count(*) as y0_ FROM Product this0__ WHERE this0__.Department = this_.Number)]"
Source="NHibernate"
StackTrace:
bei NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters)
bei NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor session, QueryParameters queryParameters)
bei NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet querySpaces, IType[] resultTypes)
bei NHibernate.Loader.Criteria.CriteriaLoader.List(ISessionImplementor session)
bei NHibernate.Impl.SessionImpl.Find(CriteriaImpl criteria, IList results)
bei NHibernate.Impl.SessionImpl.Find(CriteriaImpl criteria)
bei NHibernate.Impl.CriteriaImpl.List()
bei NHibernate.Impl.CriteriaImpl.UniqueResult()
bei NHibernate.Impl.CriteriaImpl.UniqueResult[T]()