LINQ to SQL fa questo utilizzando una funzione ROW_NUMBER finestre:
SELECT a,b,c FROM
(SELECT a,b,c, ROW_NUMBER() OVER (ORDER BY ...) as row_number
FROM Table) t0
WHERE to.row_number BETWEEN 1000 and 1100;
questo funziona, ma la necessità di fabbricare il row_number dal ORDER BY può risultato nella query da ordinare sul lato server e causare problemi di prestazioni. Anche quando un indice può soddisfare il requisito ORDER BY, la query deve ancora contare 1000 righe prima di iniziare a restituire i risultati. Troppo spesso gli sviluppatori dimenticano questo e basta lanciare un controllo di paginazione su una tabella di 5 mil righe e chiedersi perché la prima pagina viene restituita molto più velocemente dell'ultima ...
Tuttavia, utilizzando ROW_NUMBER() è probabilmente il miglior equilibrio tra facilità d'uso e buone prestazioni, a patto di essere sicuri di evitare l'ordinamento (la condizione ORDER BY può essere soddisfatta da un indice).
fonte
2009-11-16 21:03:35
Vedere il collegamento nella mia risposta per ulteriori dettagli. http://stackoverflow.com/questions/1744802/is-there-a-sql-equivilant-to-linq-skip1000-take100/1744815#1744815 –
TRA 51 E 60 - è inclusivo. –
Ma questo prima selezionerà tutto e quindi da quella selezione prenderà solo 10 a destra? O la prima query/vista avrà già solo 10? – JedatKinports