Первая версия даже не скомпилируется - потому что возвращаемое значение Take
равно IEnumerable<T>
, а не List<T>
.Таким образом, вам нужно, чтобы это было:
public List<Log> GetLatestLogEntries()
{
var logEntries = from entry in db.Logs
select entry;
return logEntries.ToList().Take(10).ToList();
}
Это будет извлекать все данные из базы данных и преобразовывать их в список, затем взять первые 10 записей, затем снова преобразуйте его в список.
Получение Take(10)
в базе данных (т. е. во второй форме) определенно выглядит для меня намного дешевле ...
Обратите внимание, что метода Queryable.ToList()
нет - в итоге вы вызовете Enumerable.ToList()
, который будет извлекать все записи.Другими словами, вызов ToList
не не участвует в переводе SQL, тогда как Take
делает.
Также обратите внимание, что использование здесь выражения запроса не имеет большого смыслаили.Я бы написал так:
public List<Log> GetLatestLogEntries()
{
return db.Log.Take(10).ToList();
}
Имейте в виду, вы можете захотеть позвонить OrderBy
- иначе он просто примет первые 10 найденных записей, которые могут быть не самыми последними ...