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
Abilitare .NET 10 su Azure App Service e Azure Functions
Anonimizzare i dati sensibili nei log di Azure Front Door
Evitare memory leaks nelle closure JavaScript
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Generare una User Delegation SAS in .NET per Azure Blob Storage
Integrare un servizio esterno con .NET Aspire
Le cron expression di un workflow di GitHub
Configuratione e utilizzo .NET Aspire CLI
Eseguire query in contemporanea con EF
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
Controllare la velocità di spostamento su una pagina HTML
Rendere i propri workflow e le GitHub Action utilizzate più sicure
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Esaminare documenti XML con namespace utilizzando LINQ to XML
- Le DirectInk API nella Universal Windows Platform
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Gli oggetti CallOut di Expression Blend 4.0
- Sfruttare una CDN con i bundle di ASP.NET


