Obliczanie sumy wartości w sekwencji numerycznej
Sum Użyj operatora, aby obliczyć sumę wartości liczbowych w sekwencji.
Zwróć uwagę na następujące cechy Sum
operatora w linQ to SQL:
Operator
Sum
agregujący operator zapytania standardowego oblicza wartość zero dla pustej sekwencji lub sekwencji zawierającej tylko wartości null. W linQ to SQL semantyka języka SQL pozostaje niezmieniona. Z tego powoduSum
oblicza wartość null zamiast zera dla pustej sekwencji lub dla sekwencji zawierającej tylko wartości null.Ograniczenia języka SQL dotyczące wyników pośrednich mają zastosowanie do agregacji w linQ to SQL. Suma 32-bitowych liczb całkowitych nie jest obliczana przy użyciu wyników 64-bitowych, a przepełnienie może wystąpić w przypadku tłumaczenia
Sum
LINQ to SQL . Taka możliwość istnieje, nawet jeśli implementacja standardowego operatora zapytania nie powoduje przepełnienia odpowiadającej sekwencji w pamięci.
Przykład 1
W poniższym przykładzie znajduje się łączny fracht wszystkich zamówień w Order
tabeli.
Jeśli uruchomisz to zapytanie względem przykładowej bazy danych Northwind, dane wyjściowe to: 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)
Przykład 2
Poniższy przykład zawiera łączną liczbę jednostek zamówienia dla wszystkich produktów.
Jeśli uruchomisz to zapytanie względem przykładowej bazy danych Northwind, dane wyjściowe to: 780
.
Należy pamiętać, że należy rzutować short
typy (na przykład UnitsOnOrder
), ponieważ Sum
nie ma przeciążenia dla krótkich typów.
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)