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
Arricchire l'interfaccia di .NET Aspire
Anonimizzare i dati sensibili nei log di Azure Front Door
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Selettore CSS :has() e i suoi casi d'uso avanzati
Collegare applicazioni server e client con .NET Aspire
Proteggere l'endpoint dell'agente A2A delle Logic App
Evitare memory leaks nelle closure JavaScript
Ridimensionamento automatico input tramite CSS
La gestione della riconnessione al server di Blazor in .NET 9
Ridurre il reflow ottimizzando il CSS
Gestione ciclo di vita in .NET Aspire
Utilizzare WebJobs su Linux con Azure App Service


