Partager via


Procédure : calculer la somme de valeurs dans une séquence numérique (LINQ to SQL)

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 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 à l'aide 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

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.

Dim totalFreight = Aggregate ord In db.Orders _
                   Into Sum(ord.Freight)

Console.WriteLine(totalFreight)
System.Nullable<Decimal> totalFreight =
    (from ord in db.Orders
    select ord.Freight)
    .Sum();

Console.WriteLine(totalFreight);

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.

Dim totalUnitsOnOrder = Aggregate prod In db.Products _
                        Into Sum(prod.UnitsOnOrder)

Console.WriteLine(totalUnitsOnOrder)
System.Nullable<long> totalUnitsOnOrder =
    (from prod in db.Products
    select (long)prod.UnitsOnOrder)
    .Sum();

Console.WriteLine(totalUnitsOnOrder);

Voir aussi

Concepts

Téléchargement d'exemples de bases de données (LINQ to SQL)

Autres ressources

Requêtes d'agrégation (LINQ to SQL)