IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

lorsque foreach rencontre une valeur null


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de solo190
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 412
    Par défaut lorsque foreach rencontre une valeur null
    salut a tous,
    s'il vous plait aidé moi a me débaraser de cette erreur. voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     var req_recherche_eleve =
                from E in ltsql_encaissement_scolarite.Eleves.DefaultIfEmpty()
                join S in ltsql_encaissement_scolarite.scolarite on E.Classe equals S.clasee into jointure1
                from S in jointure1.DefaultIfEmpty()
                join R in ltsql_encaissement_scolarite.Reglements on E.Code_eleve equals R.Code_eleve into jointure2
                from R in jointure2.DefaultIfEmpty()
                where (E.Code_eleve==txt_Code_eleve.Text)
                select new {    E.Code_eleve, E.Nom_eleve, E.Prenoms_eleve, E.Classe, S.clasee, R.Reste_a_payer, S.Montant_total,
                                 R.Montant_reglement };
                foreach (  var  identification in req_recherche_eleve)
                {
                    txt_Nom_eleve.Text = identification.Nom_eleve;
                    txt_Prenoms_eleve.Text = identification.Prenoms_eleve;
                    txt_Classe.Text = identification.Classe;
                    txt_Reste_a_payer.Text = identification.Reste_a_payer.ToString();
                    txt_Montant_total.Text = identification.Montant_total.ToString();
                    txt_montant_paye.Text = identification.Montant_reglement .ToString();
                }
    lorsque la table réglement est vide , une erreur est rencontré au niveau du in dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       foreach (  var  identification in req_recherche_eleve)
    par contre si la valeur recherché a une ligne dans la table Reglement alors tout se passe bien.
    s'il vous plait les gars donné moi un coup de main.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Si tu veux seulement les éléments pour lesquels il y a un reglement, tu peux faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                ...
                from R in jointure2.DefaultIfEmpty()
                where E.Code_eleve==txt_Code_eleve.Text && R != null
                ...
    (ou plus simplement, ne fait pas de jointure externe)

    Si tu veux aussi traiter les autres, dans ton select il faut que tu traites le cas où R est null

  3. #3
    Membre éclairé Avatar de solo190
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 412
    Par défaut
    Bonjour Tomlev,
    Merci p our ton intervention, elle me permet d'eradiqué le bugg mais pas de resoudre mon problème.
    en fait lorsque je fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       from R in jointure2.DefaultIfEmpty()
                where E.Code_eleve==txt_Code_eleve.Text && R != null
    ca me permet de ne pas selectionner tous ce qui n'on pas de règlement alors que je veux bien les sélectionner mais au lieu du null qu'ils est la valeur 0.
    genre isnull(R.montant_reglement,0). ce que je n'arrive pas a faire avec Linq.
    s'il te plait aide moi a nouveau

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Remplace R.montant_reglement par (R == null ? 0 : R.montant_reglement)

  5. #5
    Membre éclairé Avatar de solo190
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 412
    Par défaut
    salut tomlev,
    voici ce que j'ai trouvé avec l'aide du forum:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MontantReglement = R.Montant_reglement == null ? 0.00m : R.Montant_reglement
    et qui marche a merveille.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par solo190 Voir le message
    voici ce que j'ai trouvé avec l'aide du forum:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MontantReglement = R.Montant_reglement == null ? 0.00m : R.Montant_reglement
    C'est presque équivalent à ce que je t'ai donné, mais il y a une différence intéressante : ça fonctionne, mais seulement parce que la requête est convertie en SQL, et que SQL sait gérer ce genre de choses. Si tu exécutais cette requête sur une source de données en mémoire (une liste par exemple), ça planterait comme avant, parce que R serait null...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [vb.net] tester une valeur nulle de maniere elegante
    Par graphicsxp dans le forum Windows Forms
    Réponses: 5
    Dernier message: 22/08/2005, 15h36
  2. Réponses: 3
    Dernier message: 10/08/2005, 11h11
  3. Inserer une valeur NULL dans un champ datetime
    Par Karibou dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 10/08/2005, 10h58
  4. Affcecter une valeur NULL dans une requete paramétrée
    Par thiouwz2 dans le forum Bases de données
    Réponses: 7
    Dernier message: 05/11/2004, 15h02
  5. Passer une valeur Null dans un argument de procédure
    Par preempalver dans le forum VBA Access
    Réponses: 5
    Dernier message: 30/12/2003, 20h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo