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 avec plusieurs clauses WHERE et C#


Sujet :

Linq

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Par défaut LINQ avec plusieurs clauses WHERE et C#
    Bonjour,
    Je dois récupérer les élements d'une Table en fonction d'une recherche effectuée dans une Vue. J'ai :
    - une Table MesDonnees (avec les colonnes id, Titre, Description, Date, etc )
    - une Vue MesDonneesVue (avec les colonnes id, TitreTraite, DescriptionTraitee)

    Dans ma méthode C# j'ai en paramètre une liste de mots List<string> listeMots.
    J'aimerais récupérer les éléments de la table MesDonnees contenant tous les mots de la liste listeMots, soit dans la colonne TitreTraite soit dans la colonne DescriptionTraitee.
    Je n'arrive pas à écrire cette requête en LINQ to SQL
    Si quelqu'un peut m'aider...
    Merci beaucoup
    Cedric

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Peut-on voir ce que t'as commencé à écrire au moins ?

  3. #3
    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
    A vue de nez, je dirais quelque chose comme :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var result = MesDonnees .Where(s => ((listeMots.Count(l => s.TitreTraite .Contains(l)) == listeMots.Count) || (listeMots.Count(l => s.DescriptionTraitee.Contains(l)) == listeMots.Count));

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Par défaut
    J'ai écrit ça. N'ayant pas réussi à le faire en une seule requête, j'ai voulu le faire en 2 mais ça ne marche pas non plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    var requeteRecherche = from maVue in _context.MesDonneesVue 
                                          select maVue 
    foreach (string motCle in listeMots)
    {
    	requeteRecherche = requeteRecherche.Where(p => p.TitreTraite.Contains(motCle) || p.DescriptionTraitee.Contains(motCle));
    }
     
    var requeteResultat = from annonce in _context.MesDonnees 
                                      select annonce;
    foreach (MesDonneesVue  mesDonneesVue  in requeteRecherche)
    {
    	requeteResultat = requeteResultat.Where(p => p.ID.Equals(mesDonneesVue .ID));
    }
    C'est au niveau de ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach (MesDonneesVue  mesDonneesVue  in requeteRecherche)
    {
    	requeteResultat = requeteResultat.Where(p => p.ID.Equals(mesDonneesVue .ID));
    }
    que ça donne un résultat faux.
    Mais j'aimerais quand arriver à le faire en une seule fois.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Par défaut
    GuruuMeditation, ça ne peut pas marcher puisque qu'à aucun moment tu mentionnes MesDonneesVue

  6. #6
    Invité
    Invité(e)
    Par défaut
    Déjà peut-on savoir ce qui différencie MesDonnees et MesDonneesVue ?
    Une vue est toujours censée faciliter l'écriture des requêtes. Alors je trouve bizarre que tu ais besoin à la fois de MesDonnees et MesDonnesVue dans une seule et même requête. ça n'a aucun sens s'il se trouve que MesDonneesVue se base déjà sur MesDonnees.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Par défaut
    En fait MesDonneesVue est une vue qui se base sur la table MesDonnees. Les colonnes TitreTraite et DescriptionTraitee de la vue sont les colonnes Titre et Description de la table MesDonnees mais avec un traitement particulier, ce qui me permet de faire ma recherche.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Par défaut
    C'est vrai que tu as raison je pourrais créer une vue qui reprend toutes les colonnes de MesDonnees et avec les 2 colonnes en plus (TitreTraite et DescriptionTraitee)
    Mais de toute façon ça arrive souvent qu'on ait besoin de faire ce genre de chose. J'aimerais quand même comprendre comment on fait

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Cedric33 Voir le message
    C'est vrai que tu as raison je pourrais créer une vue qui reprend toutes les colonnes de MesDonnees et avec les 2 colonnes en plus (TitreTraite et DescriptionTraitee)
    Mais de toute façon ça arrive souvent qu'on ait besoin de faire ce genre de chose. J'aimerais quand même comprendre comment on fait

    Je suis POUR cette idée. Une fois que t'auras ta vue définie de cette façon je pense que tu pourras hérité ton entité MesDonneesVue à partir de ton entité MesDonnees. En Entity Framework je sais comment faire mais en Linq to SQL je n'ai jamais essayé mais une recherche sur Google devrait pouvoir te dire comment faire.
    Si t'arrive à faire ce que j'ai dit alors ta requête devrait être du genre :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var requeteRecherche = from maVue in _context.MesDonneesVue 
                                     select maVue;
    foreach (string motCle in listeMots)
    {
    	requeteRecherche = requeteRecherche.Where(p => p.TitreTraite.Contains(motCle) || p.DescriptionTraitee.Contains(motCle));
    }

    Test données héritant de MesDonnees alors rien t'empêche de faire le cast pour utiliser ce type d'objet.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Par défaut
    Je viens de tester. C'est vrai que c'est plus logique de faire comme ça mais j'ai un soucis car
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach (string motCle in listeMots)
    {
    	requeteRecherche = requeteRecherche.Where(p => p.TitreTraite.Contains(motCle) || p.DescriptionTraitee.Contains(motCle));
    }
    ne tient compte que du dernier terme de listeMots
    En fait si listeMots contient "Mot1" et "Mot2" alors la requête cherche les éléments contenant "Mots2" uniquement

  11. #11
    Invité
    Invité(e)
    Par défaut
    Ce n'est pas logique vu que tu parcours toute la liste. Sinon question bête : regardes bien si ta liste contient vraiment le terme dont tu parles ?

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Par défaut
    oui je viens de vérifier. En fait c'est comme si à chaque passage dans le foreach la condition WHERE précédente était remplacée par la nouvelle

  13. #13
    Invité
    Invité(e)
    Par défaut
    Je comprends maintenant.

    Vraiment j'aimerai savoir pourquoi tu te tapes Linq to SQL ?

    Avec Entity Framework, mes tâches de recherche étaient largement facilité par Entity SQL qui me permettait de générer dynamiquement mes requêtes avec ObjectQuery. je ne sais pas on peut faire ce genre de truc avec Linq to SQL

    Là je dois aller faire dodo.

    Bonne chance

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Par défaut
    Merci pour le temps que tu as passé.
    En fait je ne savais pas comment faire mes requête et un type m'a dit "utilise LINQ tu verras c'est génial"... J'avoue que pour les trucs super simple c'est génial mais dès que ca devient très légèrement plus complexe (car au fond y'a rien de complexe dans la requête) c'est génial pour papotter sur les forum

  15. #15
    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
    Linq to SQL est abandonné par MS. Au profit de linq entity (en gros). Alors Linq c'est génial, j'aime beaucoup mais, comme pour tout, ce n'est pas la solution ultime et parfois il faut passer par une bonne vieille procédure stockée Mais, pour la majorité des cas, Linq va bien (moyennant parfois quelques acrobaties syntaxiques ) et ça vaut vraiment la peine de maitriser.

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Cedric33 Voir le message
    En fait je ne savais pas comment faire mes requête et un type m'a dit "utilise LINQ tu verras c'est génial"...
    Mouais... Sauf que la personne nhje t'a pas dit de quelle technologie en rapport avec Linq :
    • Linq to XML
    • Linq to Objects
    • Linq to DataSets
    • Linq to SQL
    • Linq to Entities (Entity Framework)


    Dans ton cas vu qu'il s'agit d'ORM soit la personne voulait dire Linq to SQL ou Linq to Entities Bref on ne sait pas. Comme dit dans le post précédent Linq to SQL est arrêté donc autant s'orienter vers Entity Framework et utiliser Linq to Entities.

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Par défaut
    Bon là c'est clair je suis complètement perdu entre LINQ to SQL et ENTITIES. Va falloir que je me renseigne sur la différence. A quoi vois-tu que c'est du LINQ to SQL que j'utilise et non pas du LINQ to ENTITIES ? Enfin si ça se voit...
    Cédric, LINQ or not LINQ ? but LINQ

  18. #18
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Cedric33 Voir le message
    A quoi vois-tu que c'est du LINQ to SQL que j'utilise et non pas du LINQ to ENTITIES ? Enfin si ça se voit...
    T'inquiètes ma grand-mère ne m'a pas légué sa boule de crystal pour que je puisse savoir lequel des deux ORM tu utilises. Je l'ai su uniquement parce que tu l'as mentionné dans ton premier post.

    Sinon pour la comparaison Linq to SQL et Entity Framework (Linq to Entities) regardes cette discussion.
    Dernière modification par Invité ; 18/11/2011 à 16h34.

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Par défaut
    Je pense que j'ai du me planter en disant LINQ to SQL.... Ca doit être ENTITIES.
    Vous vous dites "il est perdu lui !" ? ben oui...

  20. #20
    Invité
    Invité(e)
    Par défaut
    Question assez simple : le fichier contenant ton modèle (avec les entités etc...) porte quelle extension ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. ORACLE v. 9 : Vue avec des clauses WHERE
    Par soffinette dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/02/2007, 15h11
  2. ORACLE 9.2 : Création d'une vue avec plusieurs clauses WHERE
    Par soffinette dans le forum Administration
    Réponses: 4
    Dernier message: 01/02/2007, 11h51
  3. Insert avec une clause where !?
    Par Thomad dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 04/08/2006, 10h55
  4. Requête avec multiple clause where
    Par pgenet dans le forum Requêtes
    Réponses: 3
    Dernier message: 07/03/2006, 14h59
  5. [super requete] Dumper un model avec une clause where
    Par elievar dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/03/2005, 18h05

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