Попробуйте это:
DetachedCriteria dCriteria = DetachedCriteria.For<PoolItem>("pItem")
.SetProjection(Projections.Count("Id"))
.Add(Restrictions.EqProperty("pItem.PoolID", "pool.Id"));
IList<Post> posts = Session.CreateCriteria<Pool>("pool")
.Add(Subqueries.Gt(5, dCriteria)).List<Pool>();
Предполагая, что таблица PoolItem имеет столбец PoolID в качестве внешнего ключа таблицы пула. Отношения - один-ко-многим. Если у вас нет свойства PoolID, отображаемого в классе PoolItem, и вы просто имеете сопоставление объектов «один-два-один» с именем «Пул», то замените в выделенном критерии «pItem.PoolID» на «pItem.Pool.Id».
Хорошо, это очень помогло, но я еще не совсем там. Отображение на самом деле не представлено в классе PoolItem, только через внешний ключ в базе данных и отображение класса пула. Должен ли я разоблачить отношения через свойство Pool или есть другой/лучший способ выполнить это? Я знаю, что могу сделать это с помощью SQL, но я бы скорее изучил способ Criteria: o) – hhravn
Сопоставление свойства Pool в классе PoolItem - это не только хорошая идея относительно представления схем сущностей, но и хорошая идея, потому что это позволяет использовать эту взаимосвязь для выполнения подобных действий. Если вы предпочитаете не иметь такого свойства в своем классе, потому что хотите, чтобы используемый код не имел доступа к пулу или свойству PoolID (вы можете разоблачить их, если вам нравится только один, как только чтение) - insert = "false" update = "false"), вы можете вместо этого сопоставить это личное поле (access = "field"). – tolism7