J'utilise LINQ pour les données de pagination sur mon site Web. J'utilise actuellement Skip() et Take() pour effectuer la pagination. Maintenant, je veux mettre en cache les données en utilisant les dépendances de cache afin que le cache invalide si les données changent. Toutefois, query notifications de SQL Server ne prennent pas en charge l'expression TOP. Existe-t-il d'autres manières d'interroger un ensemble de données paginé avec LINQ qui ne génère pas de TOP? Ou une autre façon de mettre en cache ces données afin qu'elles soient invalidées?Mise en cache des résultats LINQ paginés sans utiliser Skip() ou Take()
Répondre
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();
J'aime cette idée! Il sera invalide lorsqu'un client sur cette page est supprimé ou édité. Toutefois, si vous ajoutez un nouveau client et qu'il modifie les résultats dans cette liste, je ne pense pas qu'une dépendance basée sur la deuxième requête sera invalidée. – Noel
Mettez en cache le jeu de résultats complet et définissez le paramètre SqlDependancy sur celui-ci.
Lire l'intégralité de l'ensemble à partir du cache, puis utiliser Ignorer/Prendre ceci.
C'est une bonne solution, mais malheureusement, cela ne fonctionne pas pour moi car l'ensemble de données serait trop volumineux pour être mis en mémoire cache. – Noel
- 1. Est-ce que LINQ skip & take a des performances décentes?
- 2. Linq2Entities Inclure avec Skip/Take-load problème
- 3. Linq sur DataTable avec .Skip() et la méthode .Take()
- 4. lignes en double lors de l'utilisation orderby, Skip() et Take() avec LINQ
- 5. Linq Take() question
- 6. Mise en cache des retours sans affichage
- 7. Mise en cache des résultats agrégés dans Linq2SQL
- 8. Mise en cache d'un ensemble de résultats
- 9. Retour des résultats paginés à partir de WebMethod?
- 10. Nhibernate LINQ - problèmes de mise en cache
- 11. Résultats ObjectDataSource paginés dans PageSize -1
- 12. PHP obtenir des enregistrements DNS sans mise en cache
- 13. Quand Linq's Take prend-il les résultats?
- 14. Mise en cache bitmap ou png?
- 15. Alternative à IEnumerable <T> .Skip (1) .Take (1) .Single()
- 16. Référentiel LINQ to SQL - mise en cache des données
- 17. Arrêter linq à partir des tables de mise en cache
- 18. Mise en cache des requêtes avec HttpModule
- 19. Mise en cache des données dans les grails
- 20. Comment mettre en cache les résultats NSFetchRequest sans NSFetchedResultsController?
- 21. Mise en cache NoSQL ou Ehcache?
- 22. Mise en cache ou erreur d'image IE8?
- 23. Comment implémenter la mise en cache dans Linq to SQL?
- 24. Résultats de pagination de la mise en cache de l'infrastructure Zend pour différentes requêtes
- 25. Résultats de la mise en cache Haskell d'une fonction
- 26. Paginé des résultats de recherche avec LINQ to SQL
- 27. Est-ce que les rails ont une mise en cache en mémoire sans utiliser memcache ou redis?
- 28. WPF: Meilleure méthode pour imprimer des paginés paginés
- 29. Meilleures pratiques pour la mise en cache des résultats des pages JSP?
- 30. Mise en œuvre pour la mise en cache des requêtes
Comment mélanger-vous LINQ et SqlDependency? –