Was ist das SQL-Äquivalent der .Skip()
Methode in LINQ?
Zum Beispiel: Ich möchte die Zeilen 1000-1100 aus einer bestimmten Datenbanktabelle auswählen.
Ist das nur mit SQL möglich? Oder muss ich die gesamte Tabelle auswählen und dann die Zeilen im Speicher finden? Ich möchte dies im Idealfall nach Möglichkeit vermeiden, da der Tisch sehr groß sein kann.
.net
sql
sql-server
Strahl
quelle
quelle
SQL Server 2012 und höher haben diese Syntax hinzugefügt:
quelle
LINQ to SQL verwendet dazu eine ROW_NUMBER-Fensterfunktion:
Dies funktioniert, aber die Notwendigkeit, die Zeilennummer aus ORDER BY herzustellen, kann bestehen führen, dass Ihre Abfrage auf der Serverseite sortiert wird und Leistungsprobleme verursacht. Selbst wenn ein Index die ORDER BY-Anforderung erfüllen kann, muss die Abfrage vor dem Start noch 1000 Zeilen zählen, um Ergebnisse zurückzugeben. Nur allzu oft vergessen Entwickler dies und werfen einfach eine Paginierungssteuerung über eine 5-mil-Zeilentabelle und fragen sich, warum die erste Seite so viel schneller als die letzte zurückgegeben wird ...
Trotzdem ist die Verwendung von ROW_NUMBER () wahrscheinlich die beste Balance zwischen Benutzerfreundlichkeit und guter Leistung, vorausgesetzt, Sie vermeiden die Sortierung (die ORDER BY-Bedingung kann durch einen Index erfüllt werden).
quelle
Probier diese:
Beispiel:
quelle
Mach das:
Führen Sie .Skip (1000) .Take (100) für einen LINQ to SQL-Datenkontext aus und sehen Sie sich die SQL-Ausgabe an. Es wird eine SQL-Anweisung für Sie generiert, die das tut, was Sie beschreiben.
Es wird nicht so elegant sein, aber es erledigt den Job.
quelle
Nein, aber Sie können die LIMIT-Klausel von MySQL (Stack Overflow Link) emulieren , um das gleiche Ergebnis zu erzielen.
quelle