2013-04-16 4 views
1

Je possède ce 2 objets:QueryOver collection enfant de parent

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;}  
} 

Je veux utiliser l'API NHibernet QueryOver pour obtenir un enfant sur la base du parent Id et d'identification d'enfant, c'est dire quelque chose comme me donner l'enfant Id = x appartenant au parent avec Id = y.

J'ai essayé quelque chose comme ceci:

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

Mais je me fais une exception qui n'est pas possible de convertir un objet de type enfant au parent.

Comment le formulaire correct pour QueryOver commence-t-il par une entité parente mais renvoie une entité enfant?

+0

Est-ce 'Child' ont une référence mis en correspondance avec parent? Autrement dit, 'Child.Parent' est-il disponible? –

+0

Merci pour la réponse, mais pas il n'a pas, enfant ne pas avoir à connaître le parent. Partout où j'ai résolu avec la réponse de @ jamie-ide vers le bas. – Diego

Répondre

1

Je ne sais pas si cela est possible avec QueryOver, j'ai travaillé pendant un certain temps sans arriver à rien. C'est possible avec LINQ:

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

Je préfère fortement la syntaxe LINQ sur QueryOver.

Voir aussi NH-3176

+0

Merci @Jamie J'ai essayé avec QueryOver sans succès aussi mais je me rends compte que c'est plus facile avec la syntaxe LINQ et votre réponse m'aide. Merci – Diego

Questions connexes