Wie füge ich ROW_NUMBER zu einer LINQ-Abfrage oder Entität hinzu?

asp.net entity-framework linq

Frage

Ich bin verblüfft über dieses einfache Datenproblem.

Ich verwende das Entity-Framework und habe eine Produktdatenbank. Meine Ergebnisseite gibt eine paginierte Liste dieser Produkte zurück. Im Moment werden meine Ergebnisse nach der Anzahl der Verkäufe jedes Produkts geordnet, daher sieht mein Code folgendermaßen aus:

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

Dies gibt ein IQueryable-Dataset meiner Entitäten zurück, sortiert nach der Anzahl der Verkäufe.

Ich möchte auf meiner Ergebnisseite den Rang jedes Produkts (im Datensatz) anzeigen. Meine Ergebnisse sollten so aussehen:

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

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

Ich erwarte, dass ich einfach eine Spalte in meine Ergebnisse einfügen möchte, indem ich die SQL-Variable ROW_NUMBER verwende ... aber ich weiß nicht, wie ich diese Spalte zu meiner Ergebnisdatentabelle hinzufügen kann.

Meine resultierende Seite enthält zwar eine foreach-Schleife, aber da ich einen paginierten Satz verwende, schätze ich, dass die Verwendung dieser Nummer zur Fälschung einer Rangnummer NICHT der beste Ansatz wäre.

Meine Frage ist also, wie füge ich meinen Abfrageergebnissen in diesem Fall eine ROW_NUMBER-Spalte hinzu?

Beliebte Antwort

Verwenden Sie die indizierte Überladung von 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 });


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum