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
Definire il colore di una scrollbar HTML tramite CSS
Abilitare automaticamente il force push di un gruppo su Azure DevOps
Introduzione alle Container Queries
Creare agenti facilmente con Azure AI Agent Service
Utilizzare una qualunque lista per i parametri di tipo params in C#
Creare una libreria CSS universale: Cards
Gestione CSS in Blazor con .NET 9
Documentare i servizi REST con Swagger e OpenAPI con .NET 9
Aggiornare a .NET 9 su Azure App Service
Ottimizzare le pull con Artifact Cache di Azure Container Registry
Generare una User Delegation SAS in .NET per Azure Blob Storage
Introduzione ai web component HTML


