2010-01-27 6 views
3

Hier soir, j'ai commencé à travailler sur un fournisseur NHibernate. Je crée un critère que plusieurs enregistrements vont correspondre, mais je veux seulement retourner l'enregistrement le plus récent (l'enregistrement avec le plus grand Id). Je pensais que UniqueResult() ferait cela, il ne peut pas être utilisé si une liste serait retournée autrement.NHibernate sélectionnez l'enregistrement le plus récent qui répond aux critères

Je pourrais théoriquement sélectionner la liste complète et ensuite retourner l'enregistrement désiré, mais je crois qu'il y a une meilleure façon.

Répondre

4

Pouvez-vous ajouter une Commande?

ICriteria cr = Session.CreateCriteria<MyType>(); 

cr.AddOrder(Order.Desc("Id")); 

MyType justone = cr.UniqueResult(); 
+0

Oui, mais je suis toujours retourné une liste. Je veux seulement obtenir un seul objet – splatto

+0

Vous pouvez utiliser en conjonction avec 'UniqueResult()'. Voir ma mise à jour – Joel

+0

Vous avez raison, j'ai mal interprété la sténographie. Je vais vous donner la bonne réponse et laisser la mienne ci-dessous afin que ceux dans une situation similaire puissent voir le corps de la méthode complète. Merci! – splatto

0

Voici finalement ce qui était requis. C'était en fait une combinaison de quelques choses que j'avais déjà essayées.

MyObject mo = (MyObject)_session.CreateCriteria(typeof(MyObject)) 
       .Add(Restrictions.Eq("Property", value)) 
       .AddOrder(Order.Desc("Id")) 
       .SetMaxResults(1).UniqueResult(); 
      Log.Info(this, string.Format("Retrieving latest MyObject {0}.", mo.Name)); 
      return mo; 
Questions connexes