Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 agregujący standardowego zapytania
Sum
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 liczb całkowitych 32-bitowych nie jest obliczana z użyciem wyników 64-bitowych, co może prowadzić do przepełnienia w trakcie tłumaczenia LINQ to SQL za pomocą
Sum
. 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)