Как реализовать 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?

Ответы на вопрос(3)

Ваш ответ на вопрос