Linq to Entities Skip () et Take ()

Je travaille sur une application ASP.NET et je crée une requête LINQ qui sélectionnera les enregistrements paginés de la firebase database. sur l’interface utilisateur, j’ai une zone de liste où l’utilisateur peut sélectionner plusieurs choix. Je veux savoir:

  • Comment puis-je incrémenter les parameters Skip (), Take () pour afficher les résultats suivants?

  • Comment utiliser le mot clé “IN” pour que, si l’utilisateur sélectionne plusieurs options dans la liste, la requête puisse vérifier toutes les valeurs?

Ma requête ressemble à ceci:

var searchResults = context.data_vault.Where(d => d.STATE == lstStates.SelectedItem.Text).OrderBy(d= > d.dv_id).Take(10).Skip(2); GridView1.DataSource = searchResults; GridView1.DataBind(); 

Je pense que vous utilisez Skip de manière incorrecte. Ce devrait être avant la prise.

Ignorer ignore un certain nombre d’enregistrements. Par conséquent, pour la première page, indiquez 0, sinon indiquez les (numéro de page – 1) * enregistrements par page.

Je fais habituellement quelque chose comme ça:

 int Page = 1; int RecordsPerPage = 10; var q = yourQuery.Skip((Page - 1) * RecordsPerPage).Take(RecordsPerPage); 

Vous devez d’abord activer la pagination sur le GridView. Puis sur l’événement PageIndexChanging :

 var result = db.Where(...) .Skip(e.NewPageIndex * grid.PageSize) .Take(grid.PageSize) .ToList(); // this is very important part too 

Pour imiter le comportement IN :

 var selection = list.SelectedItems.Select(i => i.Text).ToArray(); var result = db.Where(x => selection.Contains(x.Prop)); 

Essaye ça:

  int temp = (CurrentPageNumber - 1) * 10; var searchResults = context.data_vault.Where(d => d.STATE == lstStates.SelectedItem.Text).OrderBy(d= > d.dv_id).Skip(temp).Take(10);