210 votes

Comment forcer LINQ Sum() à retourner 0 lorsque la collection source est vide ?

En fait, lorsque je fais la requête suivante, si aucune piste n'a été trouvée, la requête suivante lève une exception. Dans ce cas, je préférerais que la somme soit égale à 0 plutôt qu'une exception soit levée. Est-ce que cela serait possible dans la requête elle-même - je veux dire qu'au lieu de stocker la requête et de contrôler query.Any() ?

double earnings = db.Leads.Where(l => l.Date.Day == date.Day
                && l.Date.Month == date.Month
                && l.Date.Year == date.Year
                && l.Property.Type == ProtectedPropertyType.Password
                && l.Property.PropertyId == PropertyId).Sum(l => l.Amount);

0voto

Mona Points 9
db.Leads.Where(l => l.Date.Day == date.Day
        && l.Date.Month == date.Month
        && l.Date.Year == date.Year
        && l.Property.Type == ProtectedPropertyType.Password
        && l.Property.PropertyId == PropertyId)
     .Select(l => l.Amount)
     .ToList()
     .Sum();

0voto

Pepe0217 Points 1

Une autre option consiste à exprimer la valeur, comme dans le code ci-dessous

(decimal?)(x.TicketDetails.Sum(y => y.Cost *y.Qty)) ?? 0

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X