Partager via


Calculer la somme des valeurs dans une séquence numérique

Utilisez l’opérateur Sum pour calculer la somme des valeurs numériques dans une séquence.

Notez les caractéristiques suivantes de l’opérateur Sum dans LINQ to SQL :

  • L’opérateur d’agrégation de requête standard Sum prend la valeur zéro pour une séquence vide ou une séquence qui contient uniquement des valeurs nulles. Dans LINQ to SQL, la sémantique de SQL reste inchangée. Pour cette raison, Sum évalue à null au lieu de zéro pour une séquence vide ou pour une séquence qui contient uniquement des null.

  • Les limitations SQL relatives aux résultats intermédiaires s’appliquent aux agrégats dans LINQ to SQL. La somme de quantités d’entiers 32 bits n’est pas calculée en utilisant des résultats 64 bits, et un dépassement de capacité peut se produire pour la traduction LINQ to SQL de Sum. Cette possibilité existe même si l’implémentation de l’opérateur de requête standard n’entraîne pas de dépassement de capacité pour la séquence en mémoire correspondante.

Exemple 1

L’exemple suivant recherche le fret total de toutes les commandes du Order tableau.

Si vous exécutez cette requête sur l’exemple de base de données Northwind, la sortie est : 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)

Exemple 2

L’exemple suivant recherche le nombre total d’unités sur commande pour tous les produits.

Si vous exécutez cette requête sur l’exemple de base de données Northwind, la sortie est : 780.

Notez que vous devez caster les types short (par exemple UnitsOnOrder), car Sum n’a aucune surcharge pour les types courts.

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)

Voir aussi