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.
%Vor%Das funktioniert gut, erfordert aber zwei Rundreisen 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?
Ja, Sie können diese beiden Operationen mit Hilfe der einzigen Abfrage an die Datenbank ausführen:
%Vor% Wenn Sie MSSQL query
verwenden, wird das so aussehen:
Ich bin mir nicht sicher, ob es genug ist, aber es ist machbar unter den folgenden Einschränkungen:
(1) CurrentPage
und RowsPerPage
sind vom totalRows
-Wert nicht betroffen.
(2) Die Abfrage wird materialisiert, nachdem die Paging-Parameter angewendet wurden.
Der Trick besteht darin, group by
constant value zu verwenden, was von EF unterstützt wird. Der Code sieht so aus:
Tags und Links sql c# linq iqueryable