Ich verwende Linq / EF4.1, um einige Ergebnisse aus einer Datenbank abzurufen, und möchte die Ergebnisse auf die (X) neuesten Ergebnisse beschränken. Wobei X eine vom Benutzer festgelegte Zahl ist.
Gibt es eine Möglichkeit, dies zu tun?
Ich gebe sie derzeit zurück, um festzustellen, List
ob dies zur Einschränkung der Ergebnismenge beiträgt. Während ich dies durch Schleifen einschränken kann, bis ich X drücke, gehe ich einfach davon aus, dass die zusätzlichen Daten nicht weitergegeben werden.
Nur für den Fall, dass es relevant ist ... C # MVC3-Projekt, das aus einer SQL Server-Datenbank ausgeführt wird.
Antworten:
Verwenden Sie die
Take
Funktionint numberOfrecords=10; // read from user listOfItems.OrderByDescending(x => x.CreatedDate).Take(numberOfrecords)
Angenommen, es
listOfItems
handelt sich um eine Liste Ihrer Entitätsobjekte undCreatedDate
um ein Feld mit dem Erstellungsdatum (hier wird die Reihenfolge durch Absteigen ausgeführt, um die letzten Elemente abzurufen).http://msdn.microsoft.com/en-us/library/bb503062.aspx
quelle
results = results.OrderByDescending(x=>x.Date).Take(10);
Das OrderByDescending sortiert Elemente nach Ihrer Datums- / Uhrzeit-Eigenschaft (oder nach der Logik, die Sie verwenden möchten, um die neuesten Elemente abzurufen), und Take beschränkt sich auf die ersten x Elemente (die ersten sind dank der Bestellung die neuesten).
Bearbeiten: Um einige Zeilen zurückzugeben, die nicht in der ersten Zeile beginnen, verwenden Sie
Skip()
:results = results.OrderByDescending(x=>x.Date).Skip(50).Take(10);
quelle
Verwenden Sie diese Option
Take()
, bevor Sie sie in eine Liste konvertieren. Auf diese Weise kann EF die von ihm erstellte Abfrage optimieren und nur die Daten zurückgeben, die Sie benötigen.quelle