2010-11-18 18 views
1

Mit nHibernate können Sie Spaltennamen problemlos sortieren, solange der Spaltenname mit dem Mapping übereinstimmt. So zum Beispiel:AddOrder on nHibernate mit Spalten ohne Feldnamen

Map(Function(x) x.CreatedOn) 


criteria = criteria.AddOrder(New Global.NHibernate.Criterion.Order("CreatedOn", True)) 

Ist alles über Bord und gemütlich.

Allerdings habe ich Probleme, die richtige Syntax zu erhalten, um nach Eigenschaften zu sortieren, die vom Objekt abgeleitet und nicht direkt zugeordnet werden. Ich bin mir nicht einmal sicher, ob Letzteres möglich ist. Berücksichtigen Sie Folgendes:

HasMany(Function(x) x.Shipments).Cascade.SaveUpdate() 

Public Overridable ReadOnly Property Items() As IList(Of OrderItem) 
    Get 
     Return Shipments.SelectMany(Function(x) x.Items).ToList().AsReadOnly() 
    End Get 
End Property 

Wie würde man nach Items.Count in dieser Situation bestellen? Der Versuch, das objvious:

criteria = criteria.AddOrder(New Global.NHibernate.Criterion.Order("Items.Count", True)) 

führt zu einem Fehler von „konnte nicht auflösen Eigenschaft: Items“

Cheers, Matt

Antwort

1

durch einen Teil einer Komponente zu bestellen, nehmen Sie die Eigenschaftsnamen angeben würden und dann die Komponente fragen Sie einfach, ob Sie auf das Objekt im Code zugegriffen haben.

criteria = criteria.AddOrder(New Global.NHibernate.Criterion.Order("Name.Surname", True)) 

Was Ihre zweite Frage ist dies nicht leicht mit Kriterien erreicht, aber leicht geschrieben HQL verwenden kann:

query = session.CreateQuery("select s from Shipment s order by size(s.Items)") 
Verwandte Themen