Eseguire una GroupBy per entity in Entity Framework

di Stefano Mostarda, in LINQ, Entity Framework,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi