Necesito ordenar los artículos almacenados en una base de datos al descender la fecha de publicación y luego tomar los primeros 20 registros después del artículo con Id == 100
.¿Cómo implementar SkipWhile con Linq en Sql sin cargar primero toda la lista en la memoria?
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 NotSupportedException porque SkipWhile
no está soportada en LINQ to SQL (ver here).
Una posible solución es ejecutar la consulta y luego aplicar SkipWhile
usando LINQ a Objeto:
IEnumerable<ArticleDescriptor> articles =
db.Articles
.OrderByDescending(a => a.PublicationDate)
.ToList()
.SkipWhile(a => a.Article.Id != 100)
.Take(20);
Pero esto significa que tengo que cargar la totalidad lista ordenada primero en la memoria y luego tomar 20 artículos después de que el uno con Id == 100
.
¿Hay alguna manera de evitar este gran consumo de memoria?
Más en general, ¿cuál es la mejor manera de lograr esto en SQL?
requisito interesante. ¿Hay alguna relación entre 'Id' y' PublicationDate'? ¿Es lo que realmente quieres hacer para ordenarlos por fecha, sigue esa lista hasta llegar a 'Id'' 100', y * luego * toma los siguientes 20? – AakashM
Sí, eso es exactamente lo que quiero. No hay relación entre 'Id' y' PublicationDate'. El motivo de este requisito es que necesito recuperar una cierta cantidad de artículos publicados después de un artículo específico del cual solo conozco el 'Id'. Por supuesto, si conociera el 'PublicationDate' de ese artículo, sería mucho más fácil. –