2010-09-11 6 views
1

J'essaie d'effectuer un calcul. J'ai une table de donations (d) qui contient la quantité nécessaire (d.QtyNeeded) et j'ai besoin de déterminer le nombre d'articles encore nécessaires en tirant la quantité remplie (qtyfilled) de la table de donateurs. Tous les dons n'ont pas de donneur, j'ai donc besoin d'une déclaration conditionnelle pour gérer les nulls afin que la somme fonctionne. Lorsque j'essaie de compiler, j'obtiens une erreur: * L'opérateur '-' ne peut pas être appliqué aux opérandes de type 'int' et 'bool'. Je ne suis pas encore très bon à Linq, qu'est-ce qui me manque ou y at-il un meilleur moyen?Calcul de la somme conditionnelle LINQ - ne peut pas être appliqué aux opérandes de type 'int' et 'bool'

QtyOpen = d.QtyNeeded - (from dv in db.Donors 
            select dv).All(v => v.QtyFilled == null) 
            ? 0 
            : (from dv in db.Donations 
             select dv.QtyFilled).Sum() 

Répondre

0

Le problème n'est pas la déclaration LINQ, mais plutôt la priorité dans l'opérateur de soustraction. Considérez cet exemple:

int result = quantity - true ? 0 : otherValue; 

Cela ne peut pas compiler pour exactement la même raison, Opérateur « - » ne peut pas être appliqué aux opérandes de type « int » et « bool ». La solution est simplement groupe l'instruction conditionnelle à parens:

int result = quantity - (true ? 0 : otherValue); 

Ainsi, votre exemple devrait compiler en ajoutant parens sur la totalité de votre déclaration de l'opérateur conditionnel.

+0

J'ai essayé et par défaut à 0, même lorsque la requête QtyFilled retourné 2. Je ne peux pas avoir la mise en œuvre correcte . Merci. QtyOpen = d.QtyNeeded - (true? 0: (à partir de dv dans db.DonationVolunteerEntities où dv.DonationID == d.DonationID sélectionnez dv) .All (v => v.QtyFilled == null) ? 0 : (à partir de dv dans db.DonationVolunteerEntities sélectionnez dv.QtyFilled) .Sum()), – scottrakes

+0

J'ai vu ce que je faisais mal. Votre solution était parfaite. Merci. – scottrakes

0

Essayez de filtrer les valeurs NULL dans la sélection initiale en ajoutant un ou dans la sélection:

QtyOpen = d.QtyNeeded - (from dv in db.Donors 
         where dv.QtyFilled != null 
         select dv.QtyFilled).Sum(); 
Questions connexes