Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Usare l'operatore Sum per calcolare la somma dei valori numerici in una sequenza.
Si notino le caratteristiche seguenti dell'operatore Sum in LINQ to SQL:
L'operatore di query standard di aggregazione
Sumrestituisce zero per una sequenza vuota o una sequenza che contiene solo valori null. In LINQ to SQL la semantica di SQL rimane invariata. Per questo motivo,Sumrestituisce null anziché zero per una sequenza vuota o per una sequenza che contiene solo valori Null.Le limitazioni di SQL sui risultati intermedi si applicano alle aggregazioni in LINQ to SQL. La somma delle quantità integer a 32 bit non viene calcolata usando i risultati a 64 bit e l'overflow può verificarsi per la conversione LINQ to SQL di
Sum. Questa possibilità esiste anche se l'implementazione dell'operatore di query standard non causa un overflow per la sequenza in memoria corrispondente.
Esempio 1
Nell'esempio seguente viene trovato il totale del trasporto di tutti gli ordini nella tabella Order.
Se si esegue questa query sul database di esempio Northwind, l'output è: 64942.6900.
System.Nullable<Decimal> totalFreight =
(from ord in db.Orders
select ord.Freight)
.Sum();
Console.WriteLine(totalFreight);
Dim totalFreight = Aggregate ord In db.Orders _
Into Sum(ord.Freight)
Console.WriteLine(totalFreight)
Esempio 2
Nell'esempio seguente viene trovato il numero totale di unità in ordine per tutti i prodotti.
Se si esegue questa query sul database di esempio Northwind, l'output è: 780.
Si noti che è necessario eseguire il cast di tipi come short (ad esempio, UnitsOnOrder) perché Sum non dispone di overload per i tipi 'short'.
System.Nullable<long> totalUnitsOnOrder =
(from prod in db.Products
select (long)prod.UnitsOnOrder)
.Sum();
Console.WriteLine(totalUnitsOnOrder);
Dim totalUnitsOnOrder = Aggregate prod In db.Products _
Into Sum(prod.UnitsOnOrder)
Console.WriteLine(totalUnitsOnOrder)