Problème avec la requête LINQ to Entities utilisant Sum sur la propriété de l'objet enfant

.net c# entity-framework linq orm

Question

Étant donné cette requête:

from s in services
select new
{
    s.Id,
    s.DateTime,
    Class = s.Class.Name,
    s.Location,
    s.Price,
    HeadCount = s.Reservations.Sum(r => r.PartySize), // problem here. r.PartySize is int
    s.MaxSeats
}

Si le service n'a pas de réservation, cette exception est levée:

System.InvalidOperationException: l'échec de la conversion en type de valeur 'Int32' car la valeur matérialisée est null. Le paramètre générique du type de résultat ou la requête doit utiliser un type nullable.

Je comprends, mais comment dois-je régler le problème? Mon intention est que s’il n’ya pas de réservation, HeadCount soit attribué à 0.

Réponse acceptée

Vous devriez vérifier pour cela:

HeadCount = s.Reservations != null ? s.Reservations.Sum(r => r.PartySize) : 0,

Réponse populaire

Il existe une solution encore plus simple:

from s in services
select new
{
    s.Id,
    s.DateTime,
    Class = s.Class.Name,
    s.Location,
    s.Price,
    HeadCount = (int?)s.Reservations.Sum(r => r.PartySize), 
    s.MaxSeats
}

Notez le casting. Cela peut également produire un code SQL plus simple que la suggestion de @ Ahmad.

Essentiellement, vous aidez simplement l’inférence de type.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow