В конечном итоге я хочу отфильтровать все родительские объекты с числом детей менее 2.Фильтр запросов Nhibernate, основанный на подсчете дочерней коллекции
Я строю экран поиска с панелью управления сеткой, которая использует следующую логику в качестве примера построения запроса.
var query = Session.QueryOver<Parent>(() => parentAlias);
if (!string.IsNullOrWhiteSpace(SearchCriteria.OpenedBy))
query.Where(Restrictions.Eq(Projections.Property<Parent>(x => x.OpenedBy), SearchCriteria.OpenedBy));
if (SearchCriteria.OpenedDateStart != null)
query.Where(Restrictions.Ge(Projections.Property<Parent>(x => x.OpenedAt), SearchCriteria.OpenedDateStart));
Это работает прекрасно, вплоть до этого момента:
if (!string.IsNullOrEmpty(SearchCriteria.ChildrenAffected) && SearchCriteria.ChildrenAffected == "Multi")
query.Where(() => parentAlias.Children.Count > 2);
Это имеет смысл, что .Count does't работу, это на самом деле не LINQ. Также .Count() выдает ошибку. Честно говоря, я чувствую, что я пробовал каждую комбинацию Restritions, JoinAlias и т. Д., О которых я могу думать, но я ушел с пути образованных попыток и в дикое догадки королевства давным-давно.
Как настроить запрос на фильтрацию родителя на основе количества детей в синтаксисе QueryOver?
----- ПРИМЕЧАНИЕ ----- Я обсуждал использование linq после того, как идентификатор получил мой список, но я выполняю подкачку в запросе, поэтому фильтр будет применяться после возвращения страницы.
как бы где изменение положение, если это много-к -МНОГИЕ? – Seth
@Seth Вам нужно будет построить соединение через таблицу «многие ко многим» в подзапросе – xanatos
Хорошо, скоро, когда я получу его работу, я сделаю это правильно. Это выглядит правильно. – Seth