2013-04-16 3 views
1

У меня есть эти 2 объекта:QueryOver ребенка от родителей

public class Parent 
{ 
    public virtual int Poid { get; set; } 
    public virtual IEnumerable<Child> Child { get; set; } 
} 

public class Child 
{ 
    public virtual int Poid { get; set; } 
    public virtual string Name {get; set;}  
} 

Я хочу использовать NHibernet QueryOver API, чтобы получить ребенка на основе Parent Id и ребенка Id, Это значит, что-то вроде дать мне ребенка с Id = x, принадлежащий родительскому элементу с Id = y.

Я пытался что-то вроде этого:

return Session.QueryOver<Parent>().Where(p => p.Poid == y) 
       .JoinQueryOver(p => p.WishesLists) 
       .Where(c => c.Poid == x) 
       .SingleOrDefault<Child>(); 

Но я получаю исключение, которое не представляется возможным преобразовать объект типа потомка к родителю.

Какова правильная форма QueryOver, начиная с родительской сущности, но возвращая дочернее сущность?

+0

ли 'Child' имеет отображенную ссылку на родитель? То есть, доступно 'Child.Parent'? –

+0

Спасибо за ответ, но не у него нет, ребенок не должен знать о родителе. Где-то я решил с ответом @ jamie-ide. – Diego

ответ

1

Я не знаю, возможно ли это с помощью QueryOver, я некоторое время работал над ним, не достигнув нигде. Это возможно с помощью LINQ:

var child = session.Query<Parent>() 
        .Where(p => p.Poid == y) 
        .SelectMany(p => p.WishesLists) 
        .SingleOrDefault(c => c.Poid == x); 

Я сильно предпочитаю синтаксис LINQ над QueryOver.

Смотрите также NH-3176

+0

Спасибо @Jamie Я пробовал с QueryOver без успеха, но я понимаю, что проще с синтаксисом LINQ, и ваш ответ мне поможет. благодаря – Diego

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