Ich habe den folgenden Code, um eine Volltextsuche durchzuführen. Es erstellt eine Abfrage, ruft die Gesamtzahl der von dieser Abfrage zurückgegebenen Zeilen ab und ruft dann die tatsächlichen Zeilen nur für die aktuelle Seite ab.Ausführen von zwei Abfragen in einem einzigen Umlauf in die Datenbank
// Create IQueryable
var query = from a in ArticleServerContext.Set<Article>()
where a.Approved
orderby a.UtcDate descending
select a;
// Get total rows (needed for pagination logic)
int totalRows = query.Count()
// Get rows for current page
query = query.Skip((CurrentPage - 1) * RowsPerPage).Take(RowsPerPage);
Das funktioniert gut, aber es erfordert zwei Hin- und Rückfahrten zur Datenbank. Gibt es im Interesse der Optimierung des Codes eine Möglichkeit, diese Abfrage zu überarbeiten, so dass sie nur einen Umlauf in die Datenbank hatte?
Meiner Meinung nach Nein. Wenn Sie nicht alle Zeilen im Speicher natürlich speichern möchten. –
Ich glaube nicht, dass du das in einer Rundreise machen kannst, ich denke nur daran, deine Paginierung zu überarbeiten, ohne zu zählen. – JanR
stimme ganz mit @JanR überein. Die einzige Möglichkeit, dies zu erreichen, besteht darin, die Seitennummerierung in einer Abfrage zu verwenden. Wenn die Ergebnisabfrage "null" zurückgibt, sind keine Daten zum Anzeigen vorhanden. –