¿Cómo implementar SkipWhile con Linq a Sql sin cargar primero toda la lista en la memoria?

Necesito ordenar los artículos almacenados en una base de datos descendiendo la fecha de publicación y luego tomar los primeros 20 registros después del artículo conId == 100.

Esto es lo que me gustaría hacer con Linq:

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

Sin embargo, esto genera una excepción NotSupportedException porqueSkipWhile no es compatible en Linq to Sql (veraqu).

Una posible solución es ejecutar la consulta y luego aplicarSkipWhile usando Linq para Objetar:

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

Pero esto significa que primero necesito cargar toda la lista ordenada en la memoria y luego tomar 20 artículos después del que tieneId == 100.

¿Hay alguna forma de evitar este gran consumo de memoria?

Más en general, ¿cuál es la mejor manera de lograr esto en SQL?

Respuestas a la pregunta(6)

Su respuesta a la pregunta