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