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 : WHERE IN


Sujet :

Linq

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 504
    Par défaut LINQ : WHERE IN
    Bonjour,

    J'ai une liste d'objet et je voudrais savoir si la valeur d'un attribut existe dans une liste comme en SQL :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM table1 WHERE attribut IN (SELECT value FROM table2)
    Comment faire simplement ?

    Merci d'avance

  2. #2
    Membre confirmé Avatar de hmimoud
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 135
    Par défaut
    Le linq to sql nous facilite la tache pour utiliser l'objet, donc tu peux mettre:

    var l1=from ...;//la 1ere requete
    var l2=from ...;//la 2ere requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach(.. in l1){
      foreach(...in l2){
       if(...==...)
         //tu ajoutes ces elements dans une liste
       }
    }
    A+

  3. #3
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Citation Envoyé par hmimoud Voir le message
    Le linq to sql nous facilite la tache pour utiliser l'objet, donc tu peux mettre:

    var l1=from ...;//la 1ere requete
    var l2=from ...;//la 2ere requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach(.. in l1){
      foreach(...in l2){
       if(...==...)
         //tu ajoutes ces elements dans une liste
       }
    }
    A+
    Ah oui mais non! Tu vas vite avoir des problèmes comme ca! Pour la simple et bonne raison que dans ce cas la, tu rappatries l'intégralité des deux tables! Ca va bien quand y'a 5-6 lignes mais après c'est ingérable!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var result = context.Table1.Where(i1 => context.Table2.Select(i2.Attribut).Contains(i1.Attribut));

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Par défaut
    Me trompe-je ou c'est l'équivalent d'un join?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM table1 WHERE attribut IN (SELECT value FROM table2)
    Ce qui en SQL revient à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM table1 t1
    INNER JOIN table2 t2 ON t1.attribut = t2.value
    Et en linq à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var result = from t1 in table1
    join t2 in table2 on t1.attribut equals t2.value
    select t1;

  5. #5
    Membre émérite Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Par défaut
    Pour répondre à chrisdot, oui IN est souvent l'équivalent d'un join mais y a pas de problème de cardinalité et de dédoublement de ligne. Avec linq je ne sais pas si ça change quelque chose. Mais en général j'utilise la méthode de Nathanael Marchand.

  6. #6
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var result = context.Table1.Where(i1 => context.Table2.Any(i2=>I2.value==I1.Attribut));
    Je pense que cela sera plus performant.

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

Discussions similaires

  1. LINQ clause where + ID entity
    Par Kikuts dans le forum Linq
    Réponses: 2
    Dernier message: 15/04/2011, 14h09
  2. [Linq to SQL] Clause Where dynamique
    Par Kamishu dans le forum Accès aux données
    Réponses: 2
    Dernier message: 14/08/2008, 14h17
  3. [LINQ] Where avec une Generic.List
    Par Firedeal dans le forum Framework .NET
    Réponses: 2
    Dernier message: 28/03/2008, 15h32
  4. [LINQ To SQL] Clauses WHERE dynamiques
    Par SaumonAgile dans le forum Accès aux données
    Réponses: 7
    Dernier message: 23/02/2008, 01h11

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