2013-08-29 4 views
0

Я пытаюсь получить результат, который возвращает родительский элемент, если дочерний элемент не равен null. Я новичок в NHibernate и синтаксиса QueryOver так жаль, если это совершенно неправильно, но я попытался это:QueryOver где child not null

return session.QueryOver<Parent>().Where(x => x.Child != null).SingleOrDefault(); 

Однако, это все еще возвращает родительскую строку. Затем я попробовал следующее:

Child child = null; 
return session.QueryOver<Parent>() 
.JoinAlias(x => x.Child,() => child) 
.Where(() => child.Name != null) 
.And(x=>x.Id == id).SingleOrDefault(); 

По-прежнему не везет, поскольку я получаю родительскую строку в любом случае. Что я делаю не так? Я почти уверен, что приближаюсь к нему неправильно, просто не могу найти альтернативы.

ответ

3

Базовый запрос должен быть чем-то вроде этого:

Parent parentAlias = null; 
Child childAlias = null; 

return session.QueryOver<Parent>(() => parentAlias).WithSubquery 
     .WhereExists(QueryOver.Of<Child>(() => childAlias) 
     .Where(() => parentAlias.Id == childAlias.Parent.Id) 
     .Select(c => childAlias.Id)) 
     .SingleOrDefault(); 

примечания использования псевдонимов, а также тот факт, что я решил ваш запрос с использованием подзапроса. Обратите внимание, что даже в подзапросе «условие соединения» должно быть «вставлено» вручную (я использовал parentAlias.Id == childAlias.Parent.Id)

+0

Спасибо, это сработало. – Piercy

 Смежные вопросы

  • Нет связанных вопросов^_^