Ответ 1
Brandon опубликовал решение, но требует копирования всего списка в памяти.
Если вы просто хотите "перейти" от запросов к базе данных к процессу, вы можете использовать AsEnumerable
:
startDate = postTimes.Take(100).AsEnumerable().Last().Value;
Сказав это, вы, возможно, захотите вызвать ToList(), но раньше - чтобы избежать необходимости выполнить запрос один раз для подсчета и один раз для последнего значения:
var postTimes = (from post in db.Post
where post.LastActivityUtc != null
orderby post.LastActivityUtc descending
select post.LastActivityUtc).Take(100).ToList();
DateTime startDate = DateTime.MinValue;
if (postTimes.Count >= 2)
{
startDate = postTimes.Last().Value;
}
Это выполнит запрос базы данных один раз, но только извлечет первые 100 записей в память. Конечно, он несколько падает, если вы собираетесь использовать postTimes
в другом месте...