2012-04-03 6 views
0

Ich versuche, Erste und letzte in meiner Navigation ersten zu finden, ich bin die Lage, erste Reihe gegeben mit der Funktion zu implementierenImplementieren erstes zuletzt in Nhibernate

public IList<T> GetFirstItem<T>() 
    { 
     using (ISession session = MvcApplication.SessionFactory.GetCurrentSession()) 
     { 
      using (session.BeginTransaction()) 
      { 
       return session.CreateCriteria(typeof(T)).SetFirstResult(0) 
       .SetMaxResults(1) 
       .List<T>(); 
      } 
     } 
    } 

Aber ich bin nicht in der Lage, mit nhibernate.On Klick zu implementieren letzte Schaltfläche. Ich möchte nicht zwei Abfragen verwenden. Ist es möglich, das letzte Element in einer einzelnen Nhibernate-Abfrage zu finden?

+0

Normalerweise werden SetFirstResult und setMaxResults verwendet Paging mit NH zu implementieren. Möchtest du etwas erreichen? –

Antwort

1

Ich denke, dass Sie wahrscheinlich eine Art von Sortierung verwenden möchten, um erste und letzte Elemente zu bestimmen, so können Sie ASC verwenden, um die erste und verwenden Sie DESC, um die letzte mit Sortierung zu Ihrem aktuellen Code zu erhalten.

+0

Danke Low Flying Pelican. Ich habe mein Problem ausgearbeitet. Deshalb kann ich AddOrder (Order.Desc) nicht benutzen. – user1000528

1

Ihre Implementierung von garantiert nicht, das erste Element zurückzugeben, da eine ausgewählte Abfrage Elemente in der gewünschten Reihenfolge zurückgeben kann. So erhalten Sie das erste Ergebnis in einer zufälligen Liste.

Damit Ihre Methode ordnungsgemäß funktioniert, müssen Sie einen .AddOrder(Order.Asc("<some property>")) Aufruf zu Ihren Kriterien hinzufügen, wobei <some property> eine Datenbank-ID oder ein Erstellungszeitstempel sein könnte.

Um das letzte Element zu erhalten, fügen Sie stattdessen einen .AddOrder(Order.Desc("<some property>"))-Aufruf hinzu.

(By the way, warum kehren Sie eine Liste von einer Methode, die Sie eine Nachricht erhalten sollte nur?)

+0

Danke Torbjörn Kalin. In meiner Tabelle gibt es keine Identität noch irgendeinen Zeitstempel. Ich führe Zeichenkette als Primärschlüssel ein. Das Anwenden der Reihenfolge gibt letzten Wert nicht. Meine vorherige Funktion war --- ICriteria Kriterien = session.CreateCriteria (typeof (T)); Rückgabewert criteria.AddOrder (Order.Asc (a_PKColName)). SetMaxResults (1) .List (); Dabei ist a_PKColName der Primärschlüssel. und ja, du hast Recht, ich sollte keine Liste verwenden, um einen einzelnen Gegenstand zurückzugeben. – user1000528