Pagination du entity framework C #

Existe-t-il un moyen d’obtenir le nombre de lignes d’une requête complexe Linq et de millions d’enregistrements sans bash deux fois la firebase database ni écrire 2 requêtes distinctes?

Je pourrais avoir ma propre suggestion. Ecrire une procédure stockée, mais je suis bon avec MySQL pas MSSQL.

Toutes les meilleures suggestions seraient géniales. En outre, si quelqu’un sait si Microsoft travaille sur l’ajout de cette fonctionnalité au framework d’entités.

Je suggère d’utiliser la fonction Take (). Cela peut être utilisé pour spécifier le nombre d’enregistrements à prendre à partir d’une requête linq ou d’une liste. Par exemple

 List _customers = (from a in db.customers select a).ToList(); var _dataToWebPage = _customers.Take(50); 

J’utilise une technique similaire dans une application MVC dans laquelle j’écris la liste _customers dans la session, puis je l’utilise pour d’autres requêtes de pagination lorsque l’utilisateur clique sur la page 2, 3, etc. Cela enregistre plusieurs occurrences dans la firebase database. Toutefois, si votre liste est très longue, la rédaction de la session n’est probablement pas une bonne idée.

Pour la pagination, vous pouvez utiliser les fonctions Skip () et Take () ensemble. Par exemple pour obtenir la page 2 des données:

 var _dataToWebPage = _customers.Skip(50).Take(50); 

Le moyen courant d’afficher des millions d’enregistrements consiste simplement à ne pas afficher toutes les pages. Pensez-y: si vous avez des millions d’enregistrements, disons 20 voire 100 éléments par page, vous aurez des dizaines de milliers de pages. Cela n’a pas de sens de tout montrer. Vous pouvez simplement charger la page actuelle et fournir un lien vers la page suivante, c’est tout. Vous pouvez également charger 100 à 500 enregistrements tout en affichant une seule page et en utilisant les informations des enregistrements chargés pour générer des liens de page pour les premières pages (sachez combien de pages sont disponibles).

c’est si facile sur le serveur SQL. vous pouvez écrire cette requête:

 select count() over(), table.* from table 

le nombre () sur () retournera le nombre total de lignes dans le résultat, vous n’avez donc pas besoin d’exécuter deux requêtes. N’oubliez pas que vous devez exécuter des fichiers SQL bruts sur votre contexte ou utiliser dapper qui renvoie le résultat comme modèle d’affichage.