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

Accès aux données Discussion :

[LINQ to SQL] Gérer des valeurs NULL


Sujet :

Accès aux données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Par défaut [LINQ to SQL] Gérer des valeurs NULL
    Bonjour,

    Je suis en train de développer une application utilisant SQL Server 2005 par le biais de LINQ (très pratique au passage si on sait limiter ses requêtes pour ne pas surcharger).

    J'ai une table avec plusieurs clés étrangères.

    Une fenêtre de l'application contient une sorte de moteur de recherche avec plusieurs critères facultatives (des combobox avec des valeurs prédéfinies et issues de la BDD), un bouton "chercher" et un datagridview qui montre le résultat.

    Pour simplifier ma question, le clic sur le bouton appelle cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private void rechercherCandidat(string nom, CandidatSituation situation, CandidatNote note) {
     
    [...]
     
    }
    On peut se contenter d'une simple requête LINQ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    from c in db.Candidat where
    c.ca_nom.Equals(nom) &&
    c.CandidatSituation.csi_ref == situation.csi_ref &&
    c.CandidatNote.cn_ref == note.cn_ref
    select c;
    MAIS le problème est le suivant : les paramètres ne sont pas obligatoires et il se peut qu'il y en ait qui soient NULL.

    Comment gérer au mieux les types NULL sans faire planter la requête ?

    Merci pour vos réponses

  2. #2
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Lorsque LINQ a mappé tes tables, un type nullable n'a pas été utilisé pour éviter ce désagrément ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Par défaut
    Si je met un type Nullable, ça reviendrait à demander un candidat dont sa situation est NULL, or tout candidat est au moins étudiant, chômeur, en poste, etc...

    Non ?

  4. #4
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    No Candidat est une table est mappé par LINQ en tant que classe. Je fesais plutôt référence aux champs de la classe qui représentent la table.

    Normalement Candidat ne peut être null vu que tu as des enregistrements dans ta table,par contre la valeur des champs elles peuvent l'être.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Par défaut
    Je te remercie de ta réponse, mais les champs de Candidat ne sont pas nullable. Tout candidat a son nom, sa situation et sa note.

    Ce que j'entendais par là est : si je recherche un candidat sans avoir indiqué son nom, ça me retourne tous les candidats (c'est à dire que le paramètre nom est vide).

    Avant sa conversion en LINQ, l'ancien code était (en très simplifié) :

    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
    19
     
    List<string> where = new List<string>();
    if (nom.trim() != String.empty)
         where.add("ca_nom LIKE '%"+nom+"%'");
     
    // situation est un objet perso que j'avais mappé à la main
    if (situation != null)
         where.add("ca_refCandidatSituation = "+situation.id.ToString());
     
    // note est un objet perso que j'avais mappé à la main
    if (note != null)
         where.add("ca_refCandidatNote = "+note.id.ToString());
     
    [...]
     
    // je fabrique la chaîne whereStr avec des AND au milieu
     
    // puis cette requête
    string requete = "select * from Candidat where "+whereStr;
    On peut faire l'équivalent en LINQ ? D'où ma question

  6. #6
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Tu définie ça avant l'appel de la requête non ?

Discussions similaires

  1. [SQL] Affichage des valeurs nulles dans un Count
    Par at_first dans le forum Access
    Réponses: 4
    Dernier message: 06/03/2007, 11h07
  2. NOT NULL enregistre des valeurs null
    Par tyberium dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/12/2006, 09h20
  3. [MS SQL] Remplacer des valeurs dans plusieurs tables
    Par salmoliv dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/10/2006, 17h31
  4. Probleme de requete SQL avec la valeur NULL
    Par samyghan dans le forum Installation
    Réponses: 8
    Dernier message: 12/03/2006, 17h24
  5. Comment gérer les valeur Nulles dans une requête ?
    Par sondo dans le forum Bases de données
    Réponses: 3
    Dernier message: 16/03/2005, 11h02

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