venerdì 1 ottobre 2010

Ho notato girando in rete che uno dei problemi più frequenti nell'utilizzo di Linq, è la generazione simil Sql che permettano di effettuare dei raggruppamento con annesse aggregazioni. Supponiamo per esempio di volere raggruppare una tabella tipo "NumeroRiga, Codice, Descrizione , Reparto, Categoria, Note, Prezzo, Quantità"  in una semplice :
Codice, Reparto, Categoria, sum(Quantita) , count(NumeroRiga)

in Sql sarebbe sufficiente la scrittura :
    SELECT  Codice, Reparto, Categoria, sum(Quantita) as TotQta, count(NumeroRiga) as Righe 
    FROM Details GROUP BY Codice, Reparto, Categoria

La stessa formulata in Linq (C#) si scrive come segue :


var result = ( from dt in Details
                    group dt by new
                    {
                        dt.Codice, dt.Reparto, dt.Categoria
                    }
                        into g
                        select new 
{ Codice = g.Key.Codice, Reparto = g.Key.Reparto, 
 Categoria = g.Key.Categoria, QtaTot = g.Sum(p => p.Quantita),
 Righe = g.Count()}
                    );

In questo caso verrà materializzata una lista di oggetti di tipo anonimo, direttamente utilizzabile per 
un DataSource di griglia. 

0 commenti:

Posta un commento