En mi aplicación móvil, trato de recuperar datos de una tabla de mi base de datos SQL Server. Estoy usando EF y trato de usar la paginación para un mejor rendimiento. Necesito recuperar los datos desde el último elemento de la tabla. así que si la tabla tiene 20 filas, que yo, por la página 0, Id 20, 19, 18, 17, 16, a continuación, para página 1 de Identificadores de 15, 14, 13, 12, 11 y así sucesivamente...
El problema es este: lo que si, mientras que el usuario de "a" es la descarga de los datos de la tabla, el usuario "B" añadir fila? Si el usuario "Una" Página 0 (IDs 20, 19, 18, 17, 16), el usuario "B" en el mismo momento en añadir fila (por lo tanto, ID 21), con el clásico de la consulta, el usuario "A" de la página 1 tendrá IDs 16, 15, 14, 13, 12... así que otra vez ID 16
Mi código es muy simple:
int RecordsForPagination = 5;
var list = _context.NameTable
.Where(my_condition)
.OrderByDescending(my_condition_for ordering)
.Skip (RecordsForPagination * Page)
.Take (RecordsForPagination)
.ToList();
Por supuesto Page
es de tipo int que vienen desde el frontend.
¿Cómo puedo solucionar el problema?
He encontrado una solución, pero no sé si es el perfecto. Yo podría usar
.SkipWhile(x => x.ID >= LastID)
en su lugar
.Skip (RecordsForPagination * Page)
y, por supuesto, LastID
siempre se envía desde el frontend.
¿Cree usted que el rendimiento es siempre bueno con este código? Hay una solución mejor?