2009-11-14 13 views
5

Ich habe eine Frage zu LINQ. Ich bin mit Überspringen und Take-Paging zu tun:linq Paging - Get Gesamtreihen

(from l in db.ProductList 
      select l).Skip((page - 1) * row_per_page).Take(row_per_page) 

Es Arbeit, und ich brauche abrufen Gesamtreihe Produktliste max Seite zu berechnen. Ich denke, ich muss eine andere Abfrage verwenden, um Zeilen zu zählen, aber eine andere Möglichkeit, dies in einer Abfrage oben zu tun?

Antwort

4

Um eine Anzahl der Zeilen zu erhalten, verwenden Sie die .Count() Erweiterungsmethode

var count = (from l in db.ProductList select l).Count(); 
+1

oder: var count = db.ProductList.Count() –

+0

Dies wird es tun, und da es Count aufrufen, muss es keine Datenseiten in den Speicher ziehen, da diese Informationen im Index gehalten werden (vorausgesetzt, dies Tabelle hat mindestens eins); Dies bedeutet, dass diese Abfrage extrem schnell und viel schneller ist, sogar wenn Sie einen einzelnen Datensatz zurückgeben. – naspinski

0

Es ist kein Weg, um sowohl die Gesamtzahl der Zeilen zu erhalten und eine „überspringen/nehmen“ Teilmenge von diese Zeilen in derselben Abfrage.

Gibt es einen Grund, dass Sie dies in zwei Abfragen benötigen?

1

Die Quintessenz ist, dass Sie alle Elemente aufzählen müssen, um die gesamte Seitenzahl zu erhalten. Aber Sie möchten sie nur einmal aufzählen. Ich schlage vor, Sie versuchen GroupBy-Methode, um eine IEnumerable> "Seiten" zu erhalten. Dann können Sie pages.Count() verwenden, um die Anzahl der Seiten zu ermitteln. Oder Sie können Seiten aufzählen, um jede Seite mit Elementen zu erhalten. Die GroupBy-Abfrage wird nur einmal ausgeführt.