Como implementar o SkipWhile com o Linq to Sql sem primeiro carregar a lista inteira na memóri

Preciso encomendar os artigos armazenados em um banco de dados por data de publicação decrescente e, em seguida, registrar os 20 primeiros registros após o artigo comId == 100.

Este é o que eu gostaria de fazer com o Linq:

IQueryable<Article> articles = 
    db.Articles
    .OrderByDescending(a => a.PublicationDate)
    .SkipWhile(a => a.Id != 100)
    .Take(20);

No entanto, isso gera uma NotSupportedException porqueSkipWhile não é suportado no Linq to Sql (consulteaqu).

Uma solução possível é executar a consulta e aplicarSkipWhile usando Linq to Object:

IEnumerable<ArticleDescriptor> articles = 
    db.Articles
    .OrderByDescending(a => a.PublicationDate)
    .ToList()
    .SkipWhile(a => a.Article.Id != 100)
    .Take(20);

Mas isso significa que preciso carregar toda a lista ordenada na memória primeiro e depois levar 20 artigos depois da lista comId == 100.

Existe uma maneira de evitar esse enorme consumo de memóri

m geral, qual é a melhor maneira de conseguir isso no SQ

questionAnswers(6)

yourAnswerToTheQuestion