Как реализовать SkipWhile с Linq to Sql без предварительной загрузки всего списка в память?
Мне нужно заказать статьи, хранящиеся в базе данных, по убыванию даты публикации, а затем взять первые 20 записей после статьи сId == 100
.
Вот что я хотел бы сделать с Linq:
IQueryable<Article> articles =
db.Articles
.OrderByDescending(a => a.PublicationDate)
.SkipWhile(a => a.Id != 100)
.Take(20);
Тем не менее, это генерирует NotSupportedException, потому чтоSkipWhile
не поддерживается в Linq to Sql (см.Вот).
Возможное решение - выполнить запрос и затем применитьSkipWhile
используя Linq to Object:
IEnumerable<ArticleDescriptor> articles =
db.Articles
.OrderByDescending(a => a.PublicationDate)
.ToList()
.SkipWhile(a => a.Article.Id != 100)
.Take(20);
Но это означает, что мне нужно сначала загрузить весь упорядоченный список в память, а затем взять 20 статей после того, какId == 100
.
Есть ли способ избежать такого огромного потребления памяти?
В общем, каков наилучший способ добиться этого в SQL?