Nello script #542 abbiamo introdotto la libreria Entity Framework Plus e abbiamo visto come sfruttarla per eseguire più query in un solo comando SQL. La tecnica illustrata nello script funziona quando si eseguono query che restituiscono più record, ma non è applicabile a query che tornano un dato singolo. Un tipico esempio di questa necessità è nelle dashboard che mostrano dei valori totali o medi o contatori. Un atro esempio è rappresentato dai casi in cui mostriamo una griglia paginata e dobbiamo estrarre sia i dati della pagina che il numero totale di record o pagine.
In questo casi l'utilizzo di First, Single, Max, Count causa l'immediata esecuzione della query e quindi il concetto di Future è inapplicabile. Per ovviare al problema, Entity Framework Plus introduce i metodi DeferredFirst, DeferredSingle e così via. Grazie a questi metodi la query non viene immediatamente eseguita e quindi possiamo applicare al risultato il metodo FutureValue. Questo metodo funziona esattamente come Future con la sola differenza di lavorare con un valore singolo invece che con una lista di record.
var countFuture = query.DeferredCount().FutureValue(); var itemsFuture = await query .Skip((pageIndex - 1) * pageSize) .Take(pageSize) .Future(); var items = await itemsFuture.ToList(); var count = countFuture.Value;
In questo esempio, viene creato un Future per contare i record totali di una query LINQ e successivamente viene creato u future per estrarre i dati di una pagina. Quando enumeriamo la prima query per estrarre i dati della pagina, viene eseguita anche la query che conta il numero totale di record estraendo così i dati in un comando solo e ottimizzando le prestazioni.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Ottenere un token di accesso per una GitHub App
Fissare una versione dell'agent nelle pipeline di Azure DevOps
Gestione file Javascript in Blazor con .NET 9
Disabilitare le run concorrenti di una pipeline di Azure DevOps
Utilizzare Intersect e Except per filtrare set di dati in TSql
Gestire codice JavaScript con code splitting e lazy loading
Introduzione ai web component HTML
Eseguire query in contemporanea con EF
Utilizzare WebJobs su Linux con Azure App Service
Ottimizzare le pull con Artifact Cache di Azure Container Registry
Rendere i propri workflow e le GitHub Action utilizzate più sicure
Eseguire una ricerca avanzata per recuperare le issue di GitHub