Caching von ausgelagerten LINQ Ergebnisse ohne Überspringen () oder Nehmen Sie ()
-
01-10-2019 - |
Frage
Ich bin mit LINQ für Daten in meiner Website Paging. Ich bin derzeit mit Skip () und Take (), um das Paging auszuführen. Jetzt will ich die Daten-Cache-Cache-Abhängigkeiten, so dass der der Cache, wenn sich die Daten ändern erlischt. SQL Server ist jedoch Abfragebenachrichtigungen Sie den TOP-Ausdruck nicht unterstützen. Gibt es alternative Möglichkeiten, um einen ausgelagerten Menge von Daten mit LINQ abzufragen, die nicht TOP generieren? Oder eine andere Möglichkeit, diese Daten zu cachen, so dass sie entkräftet?
Lösung
Ziehen Sie Ihre Daten in zwei Durchgängen:
// 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();
Andere Tipps
Cache die gesamte Ergebnismenge, und stellen Sie die SqlDependancy darauf.
Lesen Sie den gesamten Satz aus dem Cache und dann überspringen verwenden / Take darauf.