2016-06-23 13 views
2

Ich versuche dynamische Reihenfolge nach Richtung zu meinem Nhibernate Queryover hinzufügen. Kann mir jemand helfen, wie das geht? Ich konnte dynamisches orderby-Feld hinzufügen. aber ich weiß nicht, wie ich die Reihenfolge nach Richtung machen soll. Hier finden Sie meinen Code:So fügen Sie dynamische Sortierung nach Richtung zu NHibernate query

if (!string.IsNullOrEmpty(sortField)) 
    { 
     var sortByProperty = Helper.GetSortByProperty(sortField); 
     if (sortByProperty != null) 
     { 
      query.OrderBy(x => sortByProperty.GetValue(x, null)); 
     } 
    } 

    var result = query.Skip(pageIndex*pageSize) 
         .Take(pageSize) 
         .Future<Member>(); 
+0

Können Sie den vollständigen Code für die endgültige Lösung anzeigen? Einschließlich der Implementierung von Helper.GetSortByProperty & sortByProperty.GetValue – Hussain

Antwort

4

So wie ich dies getan haben, ist, in einer Variablen ListSortDirection Typ der Funktion übergeben, der die Abfrage tut.

So dann könnte man die

  • OrderBy() die gelten:

Sortierungen die Elemente einer Sequenz in aufsteigender Reihenfolge ein Schlüssel nach.

  • OrderByDescending() die:

sortiert die Elemente einer Sequenz, um nach einem Schlüssel in absteigender Reihenfolge.

auf IQueryable<T> abhängig von den Werten von ListSortDirection.Ascending oder ListSortDirection.Descending.


Wie OP in den Kommentaren auf Wunsch hinzugefügt Probe generischen Code:

public IList<T> GetEntityList<T>(Expression<Func<T, bool>> whereExpression, Expression<Func<T, object>> orderByExpression, ListSortDirection orderDirection, int totalPages, int start, int limit) 
{ 
    IList<T> returnVar; 
    using (var session = _nhibernate.OpenSession()) 
    { 
     var firstQueryable = session.Query<T>().Where(whereExpression); 

     IQueryable<T> secondQueryable = orderDirection == ListSortDirection.Ascending ? firstQueryable.OrderBy(orderByExpression) : firstQueryable.OrderByDescending(orderByExpression); 

     returnVar = totalPages > 0 ? secondQueryable.Skip(start).Take(limit).ToList() : secondQueryable.ToList();  
    } 

    return returnVar; 
} 


Um eine weitere Frage in Kommentar von OP, für die QueryOver API-Adresse, zum Beispiel Sie die .OrderBy(orderByExpression).Desc verwenden können umgekehrtes Sortieren.

+0

Ok. Würde es Ihnen etwas ausmachen, den Beispielcode für orderby mit benutzerdefinierten Eigenschaften und benutzerdefinierten Anweisungen zu teilen? –

+0

@MukilDeepthi meine Bearbeitung sehen. – kayess

+0

danke. ist das gleiche für QueryOver? Sorry, ich bin nicht sehr erfahren mit NHibernate –