Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
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
Sumoblicza 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 powoduSumoblicza 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)