Mise en cache les résultats paginés LINQ sans utiliser Skip () ou Take ()
-
01-10-2019 - |
Question
J'utilise LINQ pour les données pagination dans mon site. J'utilise actuellement Skip () et Take () pour effectuer la recherche de personnes. Maintenant, je veux mettre en cache les données à l'aide des dépendances de cache afin que le cache annulerait si les modifications de données. Cependant SQL Server est notifications requête ne prennent pas en charge l'expression TOP. Y a-t-il des autres moyens d'interroger un ensemble paginée de données avec LINQ qui ne génèrent pas de TOP? Ou une autre façon de mettre en cache ces données afin qu'elle annule?
La solution
Tirez vos données en deux passes:
// 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();
Autres conseils
Cache l'ensemble de résultats, et définir le SqlDependancy à cela.
Lire l'ensemble du cache, puis utilisez Ignorer / Affrontez que.