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

Linq Discussion :

Problème clause Where sur une liste qui ne renvoi rien


Sujet :

Linq

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 15
    Par défaut Problème clause Where sur une liste qui ne renvoi rien
    Bonjour,

    Je vais essayer d'expliquer le mieux possible mon problème. J'ai une classe (qui est un UserControl en WPF) qui contient une liste d'objet d'une autre classe (un autre UserControl)

    Voici donc la liste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     private List<SkillUserControl> listSkill;
    Bon la classe SkillUserControl contient plusieurs attribut, je vais juste en mentionner trois

    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
     
    public int Key
    {
    	get;
    	private set;
    }
     
    public int numPrereq
    {
    	get;
    	private set;
    }
     
    public SkillUserControl Prereq
    {
    	get;
    	internal set;
    }
    la propriété numPrereq est à -1 par défaut sinon ça veut dire que le Skill a un Skill parent et donc numPrereq contient la même valeur que la propriété Key du Skill parent (j'espère être assez clair...)

    Je fais un foreach sur la liste des Skill et si numPrereq != 1 je veux récupérer le SkillUserControl qui est le parent du skill actuel, voici mon linq:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    foreach(SkillUserControl suc in listSkill)
    {
    	if(suc.numPrereq != -1)
    	{
    		suc.Prereq = listSkill.Where(s1 => s1.Key == suc.numPrereq).ToList().First();
    	}
    }
    Il me lance une Exception en me disant que la liste ne contient aucun élément (je parle du ToList()) alors que le skill que je veux récupérer existe j'ai fait un Console.WriteLine sur tous les Skill de listSkill et ils y sont tous.

    J'ai donc voulu juste afficher la clé sur skill parent plutôt que de l'affecter pour voir si cela faisait une différence, toujours la même exception la liste retournée est vide alors que ce n'est pas censé être le cas...

    Ca fait des heures que je suis bloqué dessus, et je ne trouve pas la raison de mon problème...

    Merci d'avance pour vos réponses

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2009
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2009
    Messages : 229
    Par défaut
    Pourquoi tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    suc.Prereq = listSkill.Where(s1 => s1.Key == suc.numPrereq).ToList().First();
    essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var MySucPrereq = listSkill.Where(s1 => s1.Key == suc.numPrereq).First();

  3. #3
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Pourquoi tu fais :
    Code :Sélectionner tout - Visualiser dans une fenêtre à part12
    var MySucPrereq = listSkill.Where(s1 => s1.Key == suc.numPrereq).First(); __________________
    Essayes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var MySucPrereq = listSkill.First(s1 => s1.Key == suc.numPrereq);

  4. #4
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Ceci dis la syntaxe n'y changera rien vous dites:
    la liste retournée est vide alors que ce n'est pas censé être le cas
    et pourtant elle est bien vide avec le prédicat appliqué dans le where...

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 15
    Par défaut
    Justement je cherche à savoir pourquoi il ne me renvoi rien...

    listSkill contient tous les Skill j'ai vérifié, chaque Skill a une propriété Key qui est un int, ainsi qu'une propriété numPrereq qui contient la Key du Skill parent si il en a un ou -1 sinon.

    Donc avant de faire mon linq je veux être sûr que le Skill ait un parent d'où le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (if suc.numPrereq != -1)
    A partir de là mon linq doit me retourner l'objet SkillUserControl qui correspond au parent du Skill actuel

  6. #6
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Bonjour.

    Je vois deux solutions :
    * Soit tu utilises une biblio qui reproduit Linq pour des versions du framework dotnet antérieures à Linq et il se peut qu'il y ait un bug dans cette biblio.
    * Soit ton prédicat est effectivement erroné et je t'engage à remplacer la requête linq par un bon vieux foreach pour t'assurer que tout fonctionne bien et, à défaut, pouvoir examiner avec le débogueur comment le prédicat se comporte avec chaque élément. Bref, une fonction GetFirst perso.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/03/2010, 11h48
  2. [MySQL] Clause WHERE sur une liste et jeu de caractère
    Par napz dans le forum Langage SQL
    Réponses: 5
    Dernier message: 11/10/2006, 13h03
  3. Clause Where sur une Date
    Par Zebulonn dans le forum Installation
    Réponses: 31
    Dernier message: 20/10/2005, 11h56
  4. Réponses: 4
    Dernier message: 16/06/2005, 15h37
  5. probléme de cadre sur une image qui me sert de lien
    Par thomas_chamas dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 26/11/2004, 17h36

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