Skip()またはtake()を使用せずにPaged linq結果をキャッシュする
-
01-10-2019 - |
質問
私は自分のウェブサイトでデータのページングにLINQを使用しています。現在、Skip()とTake()を使用してページングを実行しています。ここで、キャッシュ依存関係を使用してデータをキャッシュして、データが変更された場合にキャッシュが無効になるようにします。ただし、SQLサーバー クエリ通知 一番の表現をサポートしないでください。 TOPを生成しないLINQを使用して、ページのデータセットを照会する別の方法はありますか?または、このデータをキャッシュする別の方法で、それが無効になるようにしますか?
解決
2つのパスでデータを引き出します。
// step1: get the IDs of the items in the current page.
List<int> customerIds = db.Customers
.Where(filter)
.OrderBy(c => c.FirstName)
.ThenBy(c => c.CustomerID)
.Select(c => c.CustomerID)
.Skip(200)
.Take(20)
.ToList();
// step2: get the items for that page
List<Customer> customers = db.Customers
.Where(c => customerIds.Contains(c.CustomerID))
.ToList();
他のヒント
結果セット全体をキャッシュし、SQLDEPENDACTYをそれに設定します。
キャッシュからセット全体を読んでから、Skip/Takeを使用します。
所属していません StackOverflow