La primera versión no compilaría, porque el valor de retorno de Take
es IEnumerable<T>
, no List<T>
. Por lo que se necesitaría para ser:
public List<Log> GetLatestLogEntries()
{
var logEntries = from entry in db.Logs
select entry;
return logEntries.ToList().Take(10).ToList();
}
que se vendería todos los datos de la base de datos y convertirla en una lista, a continuación, toman las primeras 10 entradas, a continuación, convertirla en una lista de nuevo .
Conseguir el Take(10)
que se produzca en la base de datos (es decir, la segunda forma) sin duda se ve un diablos de mucho más barato para mí ...
Tenga en cuenta que no hay método Queryable.ToList()
- que va a terminar llamando a la que Enumerable.ToList()
obtendrá todas las entradas. En otras palabras, la llamada a ToList
no incluye en la traducción de SQL, mientras que Take
lo hace.
También tenga en cuenta que el uso de una expresión de consulta aquí tampoco tiene mucho sentido. Me gustaría escribir como:
public List<Log> GetLatestLogEntries()
{
return db.Log.Take(10).ToList();
}
Eso sí, es posible que desee un OrderBy
llamada - de lo contrario, sólo tomará las primeras 10 entradas que encuentra, que tal vez no sean los más recientes ...
Gracias, Jon, por esto. Muy útil. –