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 attività basate su eventi con Azure Container Jobs
Autenticarsi in modo sicuro su Azure tramite GitHub Actions
Inizializzare i container in Azure Container Apps
Routing statico e PreRendering in una Blazor Web App
Sfruttare MQTT in cloud e in edge con Azure Event Grid
Accesso sicuro ai secrets attraverso i file in Azure Container Apps
Utilizzare le collection expression in C#
Assegnare un valore di default a un parametro di una lambda in C#
Usare le navigation property in QuickGrid di Blazor
Utilizzare politiche di resiliency con Azure Container App
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Evitare la script injection nelle GitHub Actions