Udostępnij za pośrednictwem


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 powodu Sum 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 SumLINQ 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)

Zobacz też