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 :

LINQ to SQL, jointure avec une valeur potentiellement null


Sujet :

Linq

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 53
    Points : 40
    Points
    40
    Par défaut LINQ to SQL, jointure avec une valeur potentiellement null
    Bonjour,
    J'ai un petit problème avec linq2sql ( bien que je n'arrive pas a faire la même chose en SQL ), je voudrais en faite faire une jointure avec une autre table sauf que la valeur de cette autre table peut être présente ou pas.

    Pour être concret j'ai 2 tables, une table contenant des voiture et l'autre des traductions dans cette table voiture, j'ai entre autre un champ Pollution contenant un uniqueidentifier pouvant etre null et la table de traduction contiens ( ou pas dépendant si l’utilisateur a ajouter du contenu pour ce champ ) une traduction, une langue et un uniqueidentifier identique a celui du champs Pollution de la table voiture (FieldID).

    j'ai donc actuellement cette query linq avec d'autre jointures mais qui fonctionne parfaitement, mais je ne sais pas comment rajouter ce lien avec ce champ pollution, lorsque j’essaye la query ne me renvoit plus rien

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    var query = (from c in context.Cars
                             join co in context.CarTranslations on c.Color equals co.FieldID
                             join f in context.CarTranslations on c.Finishes equals f.FieldID
                             join o in context.CarTranslations on c.Options equals o.FieldID
                             join cMainModel in context.CarModels on c.Model equals cMainModel.ID
                             join tMainModel in context.Translations on cMainModel.Name equals tMainModel.ItemID
                             join cModel in context.CarModels on c.ModelSpecification equals cModel.ID
                             join tModel in context.Translations on cModel.Name equals tModel.ItemID
                             where c.DealerID == dealerID && co.ISO == ISO && f.ISO == ISO && o.ISO == ISO && tMainModel.Language == ISO && tModel.Language == ISO
                             orderby c.OrderID
                             select new CarTranslated
                             {
                                 ID = c.ID,
                                 Transmision = c.Transmission,
                                 Fuel = c.Fuel,
                                 Model = tMainModel.Term,
                                 Km = c.Km,
                                 Price = c.Price,
                                 ListPrice = c.ListPrice,
                                 CustomPicture = c.CustomPicture,
                                 Advantage = c.Advantage,
                                 Type = c.Type,
                                 ModelSpecification = tModel.Term,
                                 Finishes = f.Term,
                                 Color = co.Term,
                                 AvailableDate = c.AvailableDate,
                                 Options = o.Term.Split(new[] { "\n" }, StringSplitOptions.None),
                                 Published = c.Published,
                                 OrderID = c.OrderID,
                                 ModelID = c.Model,
                                 ContactType = c.ContactType,
                                 ContactUrl = c.ContactUrl
    VOici le schema de la DB


    D'avance merci de m'aider ;-)

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    LinQ ne fait que te mettre sous le fait accompli. La cause de ce problème c'est que tu as mal conçu la base de données.

    Aurais-tu un MCD à nous fournir ? Ou à défaut le DDL de création de ces deux tables (incluant les instructions pour créer les relations) ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    Et si dans ton where tu fais ça pour les champs pouvant être null:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    where c.DealerID == dealerID && (co.ISO==null || co.ISO == ISO) && ...
    Sinon je ne comprends pas très bien pourquoi tu as plusieurs fois les mêmes tables dans tes joins.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 53
    Points : 40
    Points
    40
    Par défaut
    DotNetMatt :
    J'ai mis en pièce jointe le script pour générer les 2 tables avec leur relations ( j'avoue que je ne sais pas comment générer de MCD ou DLL )


    youtpout978:
    j'ai essayé de mettre cette condition en plus mais si il n'y a pas de valeur dans la jointure il ne me renvoi toujours pas la valeur :-(

    J'ai plusieurs jointure car j'ai plusieurs champs a traduire mais il y a peut être moyen de faire mieux ?
    Fichiers attachés Fichiers attachés

  5. #5
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    En gros tu cherches à faire un outer join non ?
    Les join dans linq sont des inner join.

    Si tu veux un outer join tu peux te baser là dessus, ça marche impeccable :
    http://msdn.microsoft.com/en-us/libr.../bb397895.aspx
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.

  6. #6
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Cela t'a-t-il aidé ?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.

Discussions similaires

  1. [sql] Probème avec une requète jointure
    Par seyrinian dans le forum SQL
    Réponses: 3
    Dernier message: 30/12/2014, 18h13
  2. Réponses: 0
    Dernier message: 26/03/2014, 04h34
  3. [Linq to Sql] Accesseur pour une valeur ou association ?
    Par Arnard dans le forum Accès aux données
    Réponses: 0
    Dernier message: 24/10/2008, 11h02
  4. Réponses: 10
    Dernier message: 01/12/2006, 00h06
  5. champ avec une valeur?
    Par sonialem2000 dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/06/2004, 09h23

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