Mi chiedevo se c'è un modo per implementare l'impaginazione in C# con DocumentDB con, o senza, il loro provider Linq?Impaginazione in C# contro DocumentDB senza Skip
Scenario: Ho un'API che supporta l'impaginazione, l'utente invia nella pagina che vogliono guardare insieme ad un pageSize, come ad esempio:
public virtual async Task<HttpResponseMessage> Get(int? page = DefaultPage, int? pageSize = DefaultPageSize)
Ho quindi utilizzare tali parametri per impaginare il i dati nel livello di accesso ai dati con il seguente codice:
return query.Skip((pageNumber - 1) * pageSize).Take(pageSize);
"Qual è il problema allora", si potrebbe chiedere. Bene, questo approccio e questo codice funzionano perfettamente durante l'utilizzo di EF e SQL. Il problema è che voglio iniziare a usare DocumentDB ma la loro implementazione Linq non ha supporto per Skip. Gli unici esempi che ho visto includono l'utilizzo della parola chiave TOP o continuation tokens che non corrisponde a e che consente agli utenti di inviare un numero di pagina e un valore di pagina.
Esiste qualche implementazione che consentirà comunque ai miei utenti di fornire pageNumber
e pageSize
nella richiesta?
Ciao Larry, Grazie per la risposta, che suona come un argomento ragionevole da fare. Anche se non riesco a vedere come utilizzare i token di continuazione e il caching, i risultati saranno fattibili se i miei utenti possono inviare qualsiasi combinazione di 'page' e' pageSize'. Sì, il valore più alto della pagina è equivalente al numero di elementi nella raccolta, anche se non sarebbe "impossibile" memorizzarlo nella cache insieme a tutte le diverse combinazioni ottenute dalla combinazione 'page' e' pageSize'? Si noti che 'pageSize' può essere tutto da 1 a circa 50. –
Supponiamo che l'utente abbia impostato la dimensione della pagina su 10 e che nella cache siano presenti 27 righe. Quindi, la cache ha solo un numero sufficiente di righe per pagina 1, pagina 2 e parte di pagina 3 in memoria quando l'utente richiede la pagina 7. Il codice calcolerebbe che deve avere almeno 80 righe nella cache per mostrare la pagina 7 e andrà a recuperare molte righe usando il token di continuazione dall'ultima richiesta. Se l'utente torna alla pagina 5, lo avrà già nella cache e non avrà bisogno di colpire DocumentDB. In pratica puoi ottenere 100 o anche 1000 di righe in millisecondi a due cifre. –
Grazie per la spiegazione. Sembra una buona strategia, soprattutto perché è abbastanza dinamica da consentire ai miei utenti di modificare il 'pageSize' tra richieste diverse. Immagino che potresti usare la cache integrata anche nelle richieste di singole risorse, il che è bello. –