¿Cuál es el equivalente SQL del .Skip()
método en LINQ?
Por ejemplo: me gustaría seleccionar las filas 1000-1100 de una tabla de base de datos específica.
¿Es esto posible solo con SQL? ¿O necesito seleccionar toda la tabla y luego buscar las filas en la memoria? Lo ideal sería evitar esto, si es posible, ya que la mesa puede ser bastante grande.
.net
sql
sql-server
Rayo
fuente
fuente
SQL Server 2012 y versiones posteriores han agregado esta sintaxis:
fuente
LINQ to SQL hace esto usando una función de ventana ROW_NUMBER:
Esto funciona, pero la necesidad de fabricar el número de fila a partir de ORDER BY puede hacer que su consulta se ordene en el lado del servidor y cause problemas de rendimiento. Incluso cuando un índice puede satisfacer el requisito ORDER BY, la consulta aún debe contar 1000 filas antes de comenzar a devolver resultados. Con demasiada frecuencia, los desarrolladores olvidan esto y simplemente lanzan un control de paginación sobre una tabla de filas de 5 mil y se preguntan por qué la primera página se devuelve mucho más rápido que la última ...
No obstante, usar ROW_NUMBER () es probablemente el mejor equilibrio entre facilidad de uso y buen rendimiento, siempre que se asegure de evitar la ordenación (la condición ORDER BY puede satisfacerse mediante un índice).
fuente
Prueba este:
Ejemplo:
fuente
Hacer esto:
Ejecute .Skip (1000) .Tome (100) en un contexto de datos LINQ to SQL y observe la salida SQL. Generará una declaración SQL para usted que hace lo que está describiendo.
No será tan elegante, pero hace el trabajo.
fuente
No, pero puede emular la cláusula LIMIT de MySQL (enlace de desbordamiento de pila) para lograr el mismo resultado.
fuente