Partager via


Comment : calculer la somme de 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 (opérateur de requête standard) Sum prend la valeur zéro pour une séquence vide ou contenant uniquement des valeurs null. Dans LINQ to SQL, la sémantique de SQL reste inchangée. Sum prend donc la valeur null plutôt que la valeur zéro pour une séquence vide ou contenant uniquement des valeurs null.

  • Les limitations de SQL sur les 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. Ce risque 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 les frais de transport totaux pour toutes les commandes de la table Order.

Si vous exécutez cette requête sur l'exemple de base de données Northwind, vous obtenez le résultat suivant : 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 commandées pour tous les produits.

Si vous exécutez cette requête sur l'exemple de base de données Northwind, vous obtenez le résultat suivant : 780.

Notez que vous devez effectuer un cast des 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