Die erste Version würde nicht einmal kompilieren - weil der Rückgabewert von Take
ein IEnumerable<T>
, keine List<T>
. So sollten Sie es brauchen:
public List<Log> GetLatestLogEntries()
{
var logEntries = from entry in db.Logs
select entry;
return logEntries.ToList().Take(10).ToList();
}
, dass alle Daten aus der Datenbank holen würde und es in eine Liste konvertieren, dann nehmen die ersten 10 Einträge, dann wandeln es wieder in eine Liste .
die Take(10)
Erste in der Datenbank auftreten (dh die zweite Form) sicherlich ein Heck von viel billiger für mich sieht ...
Hinweis, dass es keine Queryable.ToList()
Methode - Sie werden Enumerable.ToList()
Aufruf am Ende der ruft alle Einträge ab. Mit anderen Worten, der Aufruf an ToList
beteiligt sich nicht an SQL-Übersetzung, während Take
tut.
Beachten Sie auch, dass die Verwendung eines Abfrageausdrucks auch hier keinen Sinn ergibt. Ich würde schreiben Sie es als:
public List<Log> GetLatestLogEntries()
{
return db.Log.Take(10).ToList();
}
Wohlgemerkt, erhalten Sie einen Anruf OrderBy
möchten - sonst werde es nehmen nur die ersten 10 Einträge es findet, die nicht dem neuesten Stand sind sein kann ...
Danke, Jon, dafür. Sehr hilfreich. –