Caching risultati LINQ paging senza l'utilizzo di Skip () o prendere ()
-
01-10-2019 - |
Domanda
Sto usando LINQ per paging dei dati nel mio sito. Attualmente sto usando Skip () e prendere () per eseguire il paging. Ora voglio mettere in cache i dati utilizzando dipendenze della cache in modo che la cache invalida se i dati vengono modificati. Tuttavia SQL Server è interrogazione notifiche non supportano l'espressione TOP. Ci sono modi alternativi per interrogare una serie di paging dei dati con LINQ che non generano TOP? O un altro modo per memorizzare nella cache questi dati in modo che invalida?
Soluzione
Tirare i dati in due passaggi:
// 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();
Altri suggerimenti
Cache l'intero set di risultati, e impostare lo SqlDependancy a questo.
Leggi l'intero set dalla cache, e quindi utilizzare Skip / Take su questo.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow