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 :

Comment gérer les données vides (NULL) dans la requête Linq Entity vers une BD


Sujet :

Linq

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 221
    Par défaut Comment gérer les données vides (NULL) dans la requête Linq Entity vers une BD
    Bonjour,

    Je me bloque sur une requête SQL, c'est du Linq Entity plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim ListOfCampagnes As List(Of campagnes) = (From campagne In context.campagnes.Include("annonceurs").Include("secteurs") _
                                                        Where _
                                                            (campagne.Nom.Contains(argKeyWord) Or _
                                                             campagne.annonceurs.Nom.Contains(argKeyWord) Or _
                                                             campagne.secteurs.Nom.Contains(argKeyWord)) _
                                                            And _
                                                            (campagne.annonceurs.IdAnnonceur = argIdAnnonceur Or argIdAnnonceur = 0) _
                                                        Order By _
                                                            campagne.annonceurs.Nom Ascending _
                                                        Select campagne Distinct).ToList
    Comment gérer cette requête en cas de NULL dans certains champs des tables présentes? Ca crashe (NullReferenceException). Je cherche un équivalent à du LEFT JOIN en fait mais bon c'est du Linq
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  2. #2
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Pour faire un LEFT join en LINQ, il faut utiliser la fonction DefaultIfEmpty()

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var i = from a in table1 join b in table2 on a.ID = b.ID into temp
    from c in temp.DefaultIfEmpty() select c;
    avec DefaultIfEmpty(), LINQ va retourner une sequence vide au lieu de rien du tout => le le join va se faire

  3. #3
    Membre extrêmement actif
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 221
    Par défaut
    Merci pour le truc de DefaultEmpty mais ce qu'il me faut c'est en fait ne pas considérer les enregistrements nuls (INNER JOIN)
    Par exemple la requête suivante crashe car une ligne de ListOfBooks ayant un IdLibrary vide (FK vers la table libraries)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListOfBooks = (From c In ListOfBooks.DefaultIfEmpty() Order By c.libraries.Name Select c).ToList
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  4. #4
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    Tu es sûr que tu n'es pas en linq to object sur cette requete ?

    Car en effet en linq to object on ne peut pas faire d'orderby avec des reference null de façon standard

  5. #5
    Membre extrêmement actif
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 221
    Par défaut
    J'utilise du Linq to Entities mais pas du Linq to Object mais peut que linq2entities ne permet pas aussi de faire d'orderby avec des NULL
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  6. #6
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Citation Envoyé par randriano Voir le message
    Merci pour le truc de DefaultEmpty mais ce qu'il me faut c'est en fait ne pas considérer les enregistrements nuls (INNER JOIN)
    Par exemple la requête suivante crashe car une ligne de ListOfBooks ayant un IdLibrary vide (FK vers la table libraries)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListOfBooks = (From c In ListOfBooks.DefaultIfEmpty() Order By c.libraries.Name Select c).ToList

    bin il suffit de rajouter un filtre avec libraries qui n'est pas null.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListOfBooks = (From c In ListOfBooks Where c.libraries <> Null Order By c.libraries.Name Select c).ToList
    ps: je ne suis pas sur de la syntaxe en VB.NET.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  7. #7
    Membre extrêmement actif
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 221
    Par défaut
    En fait, ce n'est pas c.libraries qui contient des lignes vides causant l'erreur mais plutôt ListOfBooks qui contient des "Nom" vides, en fait "<> NULL" ou "IsNot Nothing"?

    Ma remarque: en cherchant dans ce forum, je n'ai pas trouvé beaucoup de gens qui utilisent des Include() comme dans mes requêtes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Return (From a In Context.libraries.Include("sections").Include("sections.rangees").Include("sections.rangees.messages").Include("sections.rangees.messages.tarifs").Include("sections.rangees.messages.tarifs.produitsvendus").Include("sections.rangees.messages.tarifs.produitsvendus.distributions").Include("sections.rangees.messages.tarifs.produitsvendus.distributions.produits").Include("sections.rangees.messages.tarifs.produitsvendus.distributions.fournisseurs").Include("sections.rangees.messages.tarifs.produitsvendus.supports").Include("sections.rangees.messages.tarifs.produitsvendus.supports.medias").Include("sections.rangees.messages.parutions") _
                    Select a).ToList()
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  8. #8
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Citation Envoyé par randriano Voir le message
    Ma remarque: en cherchant dans ce forum, je n'ai pas trouvé beaucoup de gens qui utilisent des Include() comme dans mes requêtes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Return (From a In Context.libraries.Include("sections").Include("sections.rangees").Include("sections.rangees.messages").Include("sections.rangees.messages.tarifs").Include("sections.rangees.messages.tarifs.produitsvendus").Include("sections.rangees.messages.tarifs.produitsvendus.distributions").Include("sections.rangees.messages.tarifs.produitsvendus.distributions.produits").Include("sections.rangees.messages.tarifs.produitsvendus.distributions.fournisseurs").Include("sections.rangees.messages.tarifs.produitsvendus.supports").Include("sections.rangees.messages.tarifs.produitsvendus.supports.medias").Include("sections.rangees.messages.parutions") _
                    Select a).ToList()
    Les Include() c'est très facile mais ça peut vite partir en vrille si il y en a beaucoup (comme dans ton exemple, ça doit donner un graphe enorme).
    En général, si beaucoup d'include, je préfère faire une StoreProc ou une View qui me renvoie uniquement les champs dont j'ai besoin, et faire un LINQ dessus, plutot que tout ramener.

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/08/2014, 20h03
  2. Réponses: 6
    Dernier message: 13/05/2011, 11h21
  3. Réponses: 2
    Dernier message: 22/02/2009, 13h02
  4. Comment centraliser les données de context dans un seul fichier ?
    Par Scorpio85 dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 31/07/2008, 14h37
  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