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
Evitare (o ridurre) il repo-jacking sulle GitHub Actions
Garantire la provenienza e l'integrità degli artefatti prodotti su GitHub
Effettuare il binding di date in Blazor
Creazione di plugin per Tailwind CSS: espandere le funzionalità del framework dinamicamente
Miglioramenti agli screen reader e al contrasto in Angular
Gestire gli accessi con Token su Azure Container Registry
Definire stili a livello di libreria in Angular
Assegnare un valore di default a un parametro di una lambda in C#
Applicare un filtro per recuperare alcune issue di GitHub
Evitare il flickering dei componenti nel prerender di Blazor 8
Utilizzare Copilot con Azure Cosmos DB
Utilizzare EF.Constant per evitare la parametrizzazione di query SQL
I più letti di oggi
- Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
- Utilizzare StartsWith ed EndsWith con Span
- Utilizzare l nesting nativo dei CSS
- Microsoft lancia il nuovo tool gratuito 'ASP.NET Web Matrix Project'
- Managed deployment strategy in Azure DevOps
- Forzare l'apertura di un file fuori dal browser
- Configurare e gestire sidecar container in Azure App Service