Estoy sorprendido por este problema de datos fácil.
Estoy usando Entity framework y tengo una base de datos de productos. Mi página de resultados devuelve una lista paginada de estos productos. En este momento mis resultados se ordenan por la cantidad de ventas de cada producto, por lo que mi código se ve así:
return Products.OrderByDescending(u => u.Sales.Count());
Esto devuelve un conjunto de datos IQueryable de mis entidades, ordenado por el número de ventas.
Quiero que mi página de resultados muestre el rango de cada producto (en el conjunto de datos). Mis resultados deberían verse así:
Page #1
1. Bananas
2. Apples
3. Coffee
Page #2
4. Cookies
5. Ice Cream
6. Lettuce
Estoy esperando que solo quiera agregar una columna en mis resultados utilizando la variable ROW_NUMBER de SQL ... pero no sé cómo agregar esta columna a mis resultados de datos.
Mi página resultante contiene un bucle foreach, pero ya que estoy usando un conjunto paginado, supongo que usar ese número para falsificar un número de clasificación NO sería el mejor enfoque.
Entonces, mi pregunta es, ¿cómo agrego una columna ROW_NUMBER a los resultados de mi consulta en este caso?
Utilice la sobrecarga indexada 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 });