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
Utilizzare Container Queries nominali
.NET Conference Italia 2024
Supportare la crittografia di ASP.NET Core con Azure Container App
Abilitare automaticamente il force push di un gruppo su Azure DevOps
Utilizzare una qualunque lista per i parametri di tipo params in C#
Utilizzare i variable font nel CSS
Eseguire una ricerca avanzata per recuperare le issue di GitHub
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Documentare i servizi REST con Swagger e OpenAPI con .NET 9
Combinare Container Queries e Media Queries
.NET Aspire per applicazioni distribuite
Migliorare l'organizzazione delle risorse con Azure Policy
I più letti di oggi
- Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
- .NET Conference Italia 2025 - Milano
- The Agentic Day - Milano
- Documentare i servizi REST con Swagger e OpenAPI con .NET 9
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!