Dela via


Beräkna summan av värden i en numerisk sekvens

Använd operatorn Sum för att beräkna summan av numeriska värden i en sekvens.

Observera följande egenskaper för operatorn Sum i LINQ till SQL:

  • Aggregeringsoperatorn Sum Standard Query Operator utvärderas till noll för en tom sekvens eller en sekvens som endast innehåller nullvärden. I LINQ till SQL lämnas semantiken för SQL oförändrad. Därför Sum utvärderas till null i stället för till noll för en tom sekvens eller för en sekvens som endast innehåller null.

  • SQL-begränsningar för mellanliggande resultat gäller för aggregeringar i LINQ till SQL. Summan av 32-bitars heltalskvantitet beräknas inte med hjälp av 64-bitarsresultat, och spill kan inträffa för LINQ till SQL-översättningen av Sum. Den här möjligheten finns även om implementeringen av Standard Query Operator inte orsakar ett spill för motsvarande minnesinterna sekvens.

Exempel 1

I följande exempel hittas den totala frakten för alla beställningar i Order tabellen.

Om du kör den här frågan mot Northwind-exempeldatabasen kommer utdata att vara: 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)

Exempel 2

I följande exempel hittar du det totala antalet enheter på beställning för alla produkter.

Om du kör den här frågan mot Northwind-exempeldatabasen kommer utdata att vara: 780.

Observera att du måste omvandla short typer (till exempel UnitsOnOrder) eftersom Sum inte har någon överlagring för korta typer.

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)

Se även