データベースに保存されている記事を出版日の降順で注文し、記事の後ろの最初の20レコードをId == 100
とする必要があります。リスト全体をメモリにロードせずに、LinqでSqlにSkipWhileを実装する方法は?
これは私がLINQのをどうしたいものです。SkipWhile
は、LINQ to SQLは(hereを参照)でサポートされていないため
IQueryable<Article> articles =
db.Articles
.OrderByDescending(a => a.PublicationDate)
.SkipWhile(a => a.Id != 100)
.Take(20);
しかし、これは非サポート例外を生成します。
IEnumerable<ArticleDescriptor> articles =
db.Articles
.OrderByDescending(a => a.PublicationDate)
.ToList()
.SkipWhile(a => a.Article.Id != 100)
.Take(20);
しかし、これは私が最初にメモリに全体の順序付きリストをロードし、1の後に20件の記事を取る必要があることを意味:
可能な解決策は、クエリを実行し、オブジェクトするのLINQを使用してSkipWhile
を適用することですId == 100
となります。
このような膨大なメモリ消費を避ける方法はありますか?
さらに一般的に、これをSQLで実現するにはどうすればよいですか?
興味深い要件のように試すことができます。 'Id'と' PublicationDate'との間には何らかの関係がありますか?あなたが本当にやりたいことは、日付で注文し、「Id」、「100」、そして次に* 20を取るまで、そのリストに沿って行くのですか? – AakashM
はい、まさに私が欲しいものです。 'Id'と' PublicationDate'との間には関係がありません。この要件の理由は、特定の記事の後に発行された特定の数の記事を取得する必要があるということです。その記事のうち、「Id」だけがわかっています。もちろん、その記事の「出版日」を知っていれば、はるかに簡単です。 –