Quando lavoriamo con SQL e vogliamo eseguire unagroup by è naturale includere nella suddetta clausola gli stessi campi che includiamo nella clausola select. Prendiamo come esempio la seguente istruzione SQL.
SELECT a.Id, a.Name, MAX(Price) FROM Books b INNER JOIN Authors a ON AuthorId = Id GROUP BY a.Id, a.Name
In questa query estraiamo una lista di autori dove per ogni autore recuperiamo id, nome e il prezzo del suo libro più costoso.
Quando lavoriamo con Entity Framework e quindi esprimiamo le nostre query su degli oggetti, il modo di ragionare cambia. Spesso infatti non vogliamo raggruppare per un campo o due, ma per una intera entity. Se riprendiamo l'esempio precedente, appare evidente come vogliamo raggruppare non per due campi, ma per l'entity Author. Possimao quindi scrivere la query LINQ nel seguente modo.
var query = context.Books .GroupBy(s => s.Author) .Select(s => new { Author = s.Key, MaxPrice = s.Max(p => p.Price) });
Come si vede dal codice, non abbiamo eseguito un raggruppamento per i singoli campi dell'autore, ma direttamente per l'entity. In fase di creazione del codice SQL, Entity Framework espanderà i campi dell'entity e genererà il codice SQL visto all'inizio.
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 manipolando liste di tipi semplici con Entity Framework Core
Eseguire query verso tipi non mappati in Entity Framework Core
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Registrare servizi multipli tramite chiavi in ASP.NET Core 8
Modificare i metadati nell'head dell'HTML di una Blazor Web App
Evitare il flickering dei componenti nel prerender di Blazor 8
Migliorare la scalabilità delle Azure Function con il Flex Consumption
Sviluppare un'interfaccia utente in React con Tailwind CSS e Preline UI
Installare le Web App site extension tramite una pipeline di Azure DevOps
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Aprire una finestra di dialogo per selezionare una directory in WPF e .NET 8
Evitare la script injection nelle GitHub Actions