Bir veritabanında saklanan makaleleri yayınlanma tarihini düşürerek sipariş vermeli ve ardından ilk 20 kaydı Id == 100
ile makaleden sonra almalıyım.Tüm listeyi önce belleğe yüklemeden SkipWhile Linq to Sql ile nasıl uygulanır?
IQueryable<Article> articles =
db.Articles
.OrderByDescending(a => a.PublicationDate)
.SkipWhile(a => a.Id != 100)
.Take(20);
Ancak bu bir NotSupportedException üretir SkipWhile
Sql (here bakınız) Linq desteklenmediği için:
Bu Linq ile yapmak istiyoruz şeydir.
Muhtemel bir çözüm sorguyu yürütmek ve sonra Nesne Linq to kullanılarak SkipWhile
uygulamaktır:
IEnumerable<ArticleDescriptor> articles =
db.Articles
.OrderByDescending(a => a.PublicationDate)
.ToList()
.SkipWhile(a => a.Article.Id != 100)
.Take(20);
Ama bu ilk belleğe bütün sıralı liste yüklemek ve daha sonra birinin ardından 20 maddesinde almak gerekir demektir Id == 100
ile.
Bu büyük bellek tüketiminden kaçınmanın bir yolu var mı?
Genel olarak, bunu SQL'de başarmanın en iyi yolu nedir?
İlginç gereksinimi gibi deneyebilirsiniz. Id' ve 'PublicationDate' arasında herhangi bir ilişki var mı? Bunları tarihe göre sipariş etmek için gerçekten yapmak istediğin şey, "100" e ulaşana kadar o listeye devam et, ve sonra * gelecek 20'yi al. – AakashM
Evet, tam olarak istediğim bu. Id' ve 'PublicationDate' arasında bir ilişki yoktur. Bu gerekçenin nedeni, sadece "Id" i bildiğim belirli bir makaleden sonra yayınlanmış belirli sayıda makaleyi almam gerektiğidir. Tabii ki, bu makalenin 'PublicationDate'ını bilseydim çok daha kolay olurdu. –