Djzlouk
Messages postés70Date d'inscriptionjeudi 26 juillet 2007StatutMembreDernière intervention20 janvier 2011
-
17 mai 2009 à 20:23
Djzlouk
Messages postés70Date d'inscriptionjeudi 26 juillet 2007StatutMembreDernière intervention20 janvier 2011
-
18 mai 2009 à 22:24
Bonjour,
Je suis sûr du Linq en ce moment et ca me pose quelques soucis. je suis sur que vous allez savoir comment faire.
Voici ma requete linq :
var suivi = from c in dao.Users
select new
{
prenomNom = c.Prenom + " " + c.Nom,
enregistrement c.Avenants.Sum(d> d.MontantAffaire),
devisEnCours = (from e in dao.Devis
where e.DelegueeA == c.DelegueA
select e.Montant).Sum(),
objectif = c.ObjectifEnregistrement.Value
};
Donc, j'ai des sous requetes ou je fait juste des Sum. Malheureusement, ce sont des valeurs qui peuvent etre null. Du coup j'ai ce message :
'La valeur null ne peut pas être assignée à un membre de type System.Decimal, car il s'agit d'un type valeur non nullable.'
Comment faire pour ne pas que cela plante et marquer 0 quand c'est null ?
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 201069 18 mai 2009 à 07:13
Hello,
Je pense qu'une de tes variables enregistrement ou devisEnCours n'est pas nullable.
Si une des sommmes ne trouve que des valeurs nulles, elle retournera null aussi.
Pour changer ça, tu peux faire un GetValueOrDefault après le Sum, et ça devrait marcher.
Amicalement, SharpMao
"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Djzlouk
Messages postés70Date d'inscriptionjeudi 26 juillet 2007StatutMembreDernière intervention20 janvier 2011 18 mai 2009 à 10:00
Yop !
C'est exactement ca, toutes les valeurs sont null du coup, il retourne null (ce qui est logique). le GetValueOrDefault me semble donc parfait !
Malheureusement quand je le met apres mon Sum VS me dit : 'cannot resolve symbole GetValueOrDefault' (le controle espace ne connait pas non plus).
Alors j'ai cherché si ne n'etait pas ma requete qui sera mal tourné qui fait que cela ne marche pas, mais non, rien à faire. Ca marche pas.
Il faut ajouter des references pour que GetValueOrDefault fonctionne ? ou j'ai raté un truc ?
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 18 mai 2009 à 11:40
Salut
Une autre solution (système D) consisterait à faire un truc du genre (dans ta requête linq) :var machin from bidule in source.table select new { monDouble (bidule.monDouble != null) ? bidule.monDouble.Value : 0 };
Je ne garantis rien, mais ça ne coûte rien d'essayer...
Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Djzlouk
Messages postés70Date d'inscriptionjeudi 26 juillet 2007StatutMembreDernière intervention20 janvier 2011 18 mai 2009 à 14:03
Re,
En faite mon probleme c'est plutot :
float?[] points = { }; // Donc rien du tout
float? sum = points.Sum();
Console.WriteLine(sum);
Mais, dans le cas que tu donnes et dans celui que je donne le résultat est bien 0. Cela marche donc tres bien.
Mais dans mon vrai cas... ca marche pas.
Je vous rappel ma requete :
var suivi = from c in dao.Users
where c.ObjectifEnregistrement != null
select new
{
prenomNom = c.Prenom + " " + c.Nom,
enregistrement c.Avenants.Sum(d> d.MontantAffaire),
devisEnCours = (from e in dao.Devis
where e.DelegueeA == c.DelegueA
select e.Montant).Sum(),
devispondere = (from e in dao.Devis
where e.DelegueeA == c.DelegueA
select e.MontantPondere).Sum(),
objectif = c.ObjectifEnregistrement
};
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 18 mai 2009 à 21:23
Le mise en page c'est parce que tu utilises un browser un peu exotique!!!?
Essayes avec IE ou Firefox, ça doit passer...
Pour ton problème, serait bien si tu pouvais mettre un code qui fonctionne pas et qui est facilement testable.
Car là tu t'imagines bien que je peux pas tester la requête, donc si tu pouvais fournir quelques objets qu'on puisse facilement tester...
Djzlouk
Messages postés70Date d'inscriptionjeudi 26 juillet 2007StatutMembreDernière intervention20 janvier 2011 18 mai 2009 à 22:23
(Je suis sous google chrome, je vais tester sous IE8, on va bien voir)
Sinon, j'ai trouvé grace à toi Bidou ! (merci :p)
Afin de vous donner un exemple, j'ai du regarder de pres la classe linqToSql qui transforme toute ma base de données en objet.
Comme j'ai 'bien' configuré ma base avec des elemenst not Null et bien certain objet on hérité de ces parametres et donc ne peuvent pas etre null. Il n'existera donc jamais :
float?[] points = { null, null, null, null, null };
Par contre, l'objet ne gere pas : float?[] points = { }; Car il n'a pas le droit d'etre null !
C'est un peu bizarre que cela ne soit pa gérer tout seul !
Du coup, je vais retoucher à toute ma base de données et autoriser le null partout... Ensuite je vais traiter les null grace à GetValueOrDefault.