Tôi cần đặt hàng các bài viết được lưu trữ trong cơ sở dữ liệu theo ngày xuất bản giảm dần và sau đó lấy 20 bản ghi đầu tiên sau bài viết với Id == 100
.Làm thế nào để thực hiện SkipWhile với LINQ to Sql mà không cần tải toàn bộ danh sách vào bộ nhớ?
Đây là những gì tôi muốn làm với LINQ:
IQueryable<Article> articles =
db.Articles
.OrderByDescending(a => a.PublicationDate)
.SkipWhile(a => a.Id != 100)
.Take(20);
Tuy nhiên, điều này tạo ra một NotSupportedException vì SkipWhile
không được hỗ trợ trong LINQ to SQL (xem here).
Một giải pháp khả thi là để thực hiện truy vấn và sau đó áp dụng SkipWhile
sử dụng LINQ to Object:
IEnumerable<ArticleDescriptor> articles =
db.Articles
.OrderByDescending(a => a.PublicationDate)
.ToList()
.SkipWhile(a => a.Article.Id != 100)
.Take(20);
Nhưng điều này có nghĩa là tôi cần phải tải toàn bộ danh sách lệnh vào bộ nhớ đầu tiên và sau đó lấy 20 bài viết sau một trong những với Id == 100
.
Có cách nào để tránh mức tiêu thụ bộ nhớ khổng lồ này không?
Nói chung, cách tốt nhất để đạt được điều này trong SQL là gì?
yêu cầu Thú vị này. Có mối quan hệ nào giữa 'Id' và' PublicationDate' không? Là những gì bạn muốn làm thực sự để đặt chúng theo ngày, đi dọc theo danh sách đó cho đến khi bạn nhận được để 'Id'' 100', và * sau đó * mất 20 tiếp theo? – AakashM
Vâng, đó là chính xác những gì tôi muốn. Không có mối quan hệ nào giữa 'Id' và' PublicationDate'. Lý do cho yêu cầu này là tôi cần tìm nạp một số bài báo nhất định được xuất bản sau một bài viết cụ thể mà tôi chỉ biết 'Id'. Tất nhiên, nếu tôi biết 'PublicationDate' của bài viết đó, nó sẽ dễ dàng hơn nhiều. –