Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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)