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 :

where not Exists


Sujet :

Linq

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 35
    Points : 35
    Points
    35
    Par défaut where not Exists
    Bonsoir,

    je galère sur une requete qui est simplicime en SQL mais pas moyen de la faire fonctionner avec Linq.

    j'ai beau chercher sur les forum droite à gauche mais je finis toujours avec un message d'erreur.

    ma requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var listecentre = (from centre in ctx.CENTRESURSSAF
                                      where !(from cotisation in ctx.CENTRESCOTISATIONS
                                              select cotisation.CODURSSAF).Contains(centre.CODURSSAF)
                                      select centre);
     
                        foreach (var item in listecentre)
                        {
                            centrecotisation.Add(item.NOM);
                    }
    le message d'erreur sur le Foreach :

    "LINQ to Entities ne reconnaît pas la méthode «*Boolean Contains[String](System.Linq.IQueryable`1[System.String], System.String)*», et cette dernière ne peut pas être traduite en expression de magasin."

    je n'arrive pas à comprendre pourquoi et quelle est mon erreur.

    pour résumer, je cherche les CODURSSAF de la table CENTRESURSSAF qui ne sont pas dans la table CENTRESCOTISATIONS. Bien entendu, CODURSSAF est à la fois dans CENTRESCOTISATIONS et dans CENTRESURSSAF

    par avance merci parce que là je tourne vraiment en rond!

  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 : 49
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Tu es en quelle version d'EF?
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 35
    Points : 35
    Points
    35
    Par défaut
    je fais le programme en 3.5

  4. #4
    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 : 49
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Si je me rappelle bien, EF 3.5 ne peut pas utiliser Contains().

    Il va falloir trouver une autre alternative. Une solution (je ne sais pas si c'est envisageable dans ton cas) c'est de passer à Linq to Object. Donc faire un .ToList() des données de bases, puis faire un Contains()
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 35
    Points : 35
    Points
    35
    Par défaut
    tu aurais un exemple? j'ai essayé avec un tolist() mais ça n'a rien changé. l'erreur n'etait plus sur le Foreach mais sur la requete (la meme erreur)

  6. #6
    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 : 49
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Il y a cet article, qui explique un peu les problèmes et donne des solutions : http://blogs.msdn.com/b/alexj/archiv...-entities.aspx
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 35
    Points : 35
    Points
    35
    Par défaut
    la solution qu'ils donnent est peut etre un peu trop... lourdes on va dire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var matches = from person in people 
            where person.Firstname == "Alex" || 
                  person.Firstname == "Colin" ||  
                  person.Firstname == "Danny" || 
                  person.Firstname == "Diego" 
            select person;
    ah la la, si je pouvais tout faire en EF4... mais non !

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2013
    Messages : 21
    Points : 37
    Points
    37
    Par défaut
    Bonjour !

    Tu es sur que la solution de GuruuMeditation ne fonctionne pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var listecentre = from centre in ctx.CENTRESURSSAF
                      where !(from cotisation in ctx.CENTRESCOTISATIONS
                              select cotisation.CODURSSAF).ToList().Contains(centre)
                      select centre;
    Bzzz

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2013
    Messages : 76
    Points : 143
    Points
    143
    Par défaut
    Et avec Any?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ctx.CENTRESURSSAF.Where(centre => !ctx.CENTRESCOTISATIONS.Any(cot=>cot.CODURSSAF == centre.CODURSSAF))
    Après, je suis pas à l'aise avec la syntaxe linq, je vous laisserai adapter le code ^^

    Avec le framework 3.5, ça devrait pas poser de soucis

Discussions similaires

  1. SQL SELECT WHERE NOT EXISTS
    Par talietotoro dans le forum Requêtes
    Réponses: 6
    Dernier message: 21/08/2023, 07h27
  2. Améliorer une requete where not exists
    Par first racing dans le forum Requêtes
    Réponses: 4
    Dernier message: 23/11/2010, 17h10
  3. Update Where not Exists
    Par wclef dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/03/2010, 10h50
  4. A propos de la clause "Where NOT EXIST"
    Par Bouga74 dans le forum Développement de jobs
    Réponses: 7
    Dernier message: 19/06/2009, 15h26
  5. Insert .. where not exists
    Par Zolex dans le forum SQL Procédural
    Réponses: 11
    Dernier message: 02/03/2007, 11h26

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