Comment ajouter ROW_NUMBER à une requête ou à une entité LINQ?

asp.net entity-framework linq

Question

Je suis perplexe devant ce problème de données facile.

J'utilise le framework Entity et dispose d'une base de données de produits. Ma page de résultats renvoie une liste paginée de ces produits. Actuellement, mes résultats sont classés en fonction du nombre de ventes de chaque produit. Mon code ressemble à ceci:

return Products.OrderByDescending(u => u.Sales.Count());

Cela renvoie un ensemble de données IQueryable de mes entités, trié par le nombre de ventes.

Je souhaite que ma page de résultats affiche le classement de chaque produit (dans l'ensemble de données). Mes résultats devraient ressembler à ceci:

Page #1
1. Bananas
2. Apples
3. Coffee

Page #2
4. Cookies
5. Ice Cream
6. Lettuce

J'espère que je veux juste ajouter une colonne à mes résultats en utilisant la variable SQL ROW_NUMBER ... mais je ne sais pas comment ajouter cette colonne à mes résultats datatable.

Ma page résultante contient une boucle foreach, mais comme j'utilise un ensemble paginé, j'imagine que l'utilisation de ce nombre pour simuler un numéro de classement ne serait PAS la meilleure approche.

Ma question est donc la suivante: comment ajouter une colonne ROW_NUMBER aux résultats de ma requête dans ce cas?

Réponse populaire

Utilisez la surcharge indexée de Select :

var start = page * rowsPerPage;
Products.OrderByDescending(u => u.Sales.Count())
    .Skip(start)
    .Take(rowsPerPage)
    .AsEnumerable()
    .Select((u, index) => new { Product = u, Index = index + start });


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow