2009-08-12 7 views
4

J'ai un objet de mon modèle de domaine qui a un objet enfant. Comment puis-je utiliser une requête de critères pour commander en fonction d'une propriété de l'enfant?Comment trier en (n) hibernate sur une propriété d'un objet enfant?

Par exemple:

class FooType 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public BarType Bar { get; set; } 
} 

class BarType 
{ 
    public int Id { get; set; } 
    public string Color { get; set; } 
} 

... 

// WORKS GREAT 
var orderedByName = _session.CreateCriteria<FooType>().AddOrder(Order.Asc("Name")).List(); 

// THROWS "could not resolve property: Bar.Color of: FooType" 
var orderedByColor = _session.CreateCriteria<FooType>().AddOrder(Order.Asc("Bar.Color")).List(); 

Que dois-je faire pour permettre à ce scénario? J'utilise NHibernate 2.1. Merci!

Répondre

13

Vous devez ajouter un alias ou créer un critère imbriqué pour votre enfant. Je ne sais pas comment faire cela dans NHibernate, dans Hibernate c'est fait par createCriteria() et createAlias() méthodes. Vous utiliserez ensuite l'alias comme préfixe dans l'ordre.

Mise à jour exemple de code Hibernate:

Criteria criteria = session.createCriteria(FooType.class); 
criteria.createAlias("bar", "b"); 
criteria.addOrder(Order.asc("b.color")); 

J'imagine dans NHibernate, il serait tout à fait similaire, mais avec des noms de propriété/entité en majuscule. Voici an example à partir de la documentation de NHibernate.

+0

Pouvez-vous me donner un échantillon de code? Je ne suis pas sûr de comprendre ce que vous voulez dire. –

Questions connexes