Normalmente, quando si usa l'operatore GroupBy per raggruppare i dati di una query, si utilizza in seguito un operatore Select per decidere quali dati restituire al client.
A partire da Entity Framework 7, possiamo utilizzare GroupBy anche come ultima istruzione di una query LINQ. In questo caso, EF si comporta in modo particolare, rispetto a quanto ci si potrebbe aspettare, ma, perfettamente regolare. Entity Framework non traduce la GroupBy LINQ in una group by SQL, ma in una normale select e una volta scaricati i dati li raggruppa sul client.
Prendiamo il seguente esempio.
var query = context.Person.GroupBy(s => s.LastName);
In questo caso, stiamo cercando tutti i dati di tutte le persone nella tabella e vogliamo che queste persone siano raggruppate in base al cognome. Un raggruppamento del genere causerebbe la restituzione di tutti i record della tabella in quanto nei campi restituiti è compreso anche l'id rendendo quindi inutile l'utilizzo di una group by. Per questo motivo Entity Framework genera la seguente query SQL.
SELECT [a].[Id], [a].[LastName], [a].[FirstName], [a].[BirthDate] FROM People AS [a] ORDER BY [a].[LastName]
Fino alla versione 6, la query LINQ che abbiamo visto solleva un'eccezione in quanto il team non era sicuro di come implementare la funzionalità per paura che l'assenza di una group by avrebbe suscitato reazioni (erronee) da parte degli utilizzatori di Entity Framework . Durante lo sviluppo di Entity Framework 7, il team ha deciso di supportare questo nuovo pattern e di fornire un'apposita documentazione molto chiara per spiegare i motivi della scelta.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Eseguire query in contemporanea con EF
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Utilizzare EF.Constant per evitare la parametrizzazione di query SQL
Rendere le variabili read-only in una pipeline di Azure DevOps
Creare una custom property in GitHub
Utilizzare Azure Cosmos DB con i vettori
Creare una libreria CSS universale: i bottoni
Referenziare un @layer più alto in CSS
Supportare lo HierarchyID di Sql Server in Entity Framework 8
I più letti di oggi
- a #RealCodeConf4 il 25 maggio a Firenze parleremo di #silverlight4. iscrizioni gratis su http://u.aspitalia.com/g9
- Parallelizzare le chiamate HTTP con async/await e le Promise in JavaScript
- Rendere sicuro l'endpoint di HealthCheck in ASP.NET Core
- #HTML5 schema per avere l'intellisense su #VS2008 (anche express) http://u.aspitalia.com/ed
- Eseguire una chiamata AJAX per inviare dati al server in Angular 2