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 Entity Where complexe


Sujet :

Linq

  1. #1
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 98
    Points : 59
    Points
    59
    Par défaut LINQ Entity Where complexe
    Bonjour à tous,

    Voila je recherche un tuto ou un truc me permettant de comprendre un peu mieux le fonctionnement de LinQ quant on travail sur un ensemble (une table).

    J'ai beaucoup de requête a faire sur une table du type:

    var machin = for p in ...
    where p.questions ....
    select p. to list()

    j'ai besoin parfois de faire des requête complexe avec par exemple le plus simple: rechercher ligne ou colonne A= valeur 3 et colonne C= valeur 2. Hors sur un where classique where (p.colonneA==3 && p.colonneC==2) je récupère toute les lignes avec colonne A=3 ou Colonne C=2. Je souhaite obtenir seulement les lignes qui sont a la fois colonneA=3 ET colonne C=2.

    Je suis un peu perdu sur les opérateurs logiques &, &&, |, ^ etc. J'arrive a m'en sortir parfois avec du != et des requêtes successive a base de "joins" mais il faut caler 5 requêtes successive en jonglant avec des bouts d'ensemble coller /couper recoller (1-all) etc pour obtenir le résultat qui va bien.

    Avez-vous une méthode plus simple ou un site qui traite du type de requêtes à faire quant on travail sur un ensemble clos et que l'on souhaite soustraire un bout particulier?

    Je me fait mal au cerveau a force d'essayer de trouver toute les requetes nécessaire pour obtenir ce que je recherche

    merci de votre aide

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 498
    Points
    1 498
    Par défaut
    Salut,

    Premiere chose sur les operateurs de tests: oubli le simple | et le simple &.
    Tant qu'on y est oublie le ^ qui sert juste pour frimer en societe.
    => du coup cela conduit juste aux operateurs:
    • || : signifie OU
    • && :singifie ET



    Hors sur un where classique where (p.colonneA==3 && p.colonneC==2) je récupère toute les lignes avec colonne A=3 ou Colonne C=2.
    Euh faudra me montrer comment tu arrives a ce resultat...


    Avez-vous une méthode plus simple ou un site qui traite du type de requêtes à faire quant on travail sur un ensemble clos et que l'on souhaite soustraire un bout particulier?

    Oui il y cette adresse: https://code.msdn.microsoft.com/101-...mples-3fb9811b

    Pour tes requetes, je crains que celles-ci soient anormalement complexes, pour atteindre le resultat excompte. Quelques conseils en vrac:
    • Si tu as du mal en une seul requete fais-en plusieurs, ce sera dans tous les cas plus lisible
    • Si tu dois faire des jointures sur 5 tables ou plus oublie entity framework et creer une vue sql ce sera plus simple.
    • Si tu as une requte que tu ne comprends pas/aurais du mal a expliquer, cela veux dire que c'est trop compliquer donc a revoir


    bonne chance et fais-nous part de tes requetes, comme ca on pourra t'aider avec plus de details.

  3. #3
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    Bonjour merci pour ta réponse .
    je vais aller voir ces exemples de code qui m'ont l'air sympathique.

    Alors concernant mon exemple un peu simple j'ai du manger quelques étapes et je posterai ce soir un exemple concret En faite mon problème viens plus je pense de la suite de requête nécessaire pour obtenir les lignes souhaitées.
    Petite précisions c'est sur une table de jonction avec clé unique, une colonne Question et une colonne Réponse (donc 3 colonnes). Une Réponse peut avoir plusieurs Questions et une Question peut aller avec plusieurs Réponses. on a quelque chose comme ça:

    id| R | Q
    1 | 1 | 1
    2 | 1 | 2
    3 | 1 | 3
    4 | 2 | 1
    5 | 2 | 3
    6 | 3 | 1

    J'ai besoin d'avoir par exemple une requête "créer moi une table de toute les réponses si Question 1 = Oui (c'est a dire présent sur la table) et effacer la question".
    ce qui donne une table de ce type:
    id| R | Q
    2 | 1 | 2
    3 | 1 | 3
    5 | 2 | 3

    ça parait simple mais en une seul requête ça me parait pas faisable, en tous cas j'y arrive pas. On voit déjà le problème de la R3. La réponse 3 contiens bien la question 1 hors elle a été effacé et a donc disparu de la table ce qui n'est pas faux mais qui pose le problème de la persistance des Réponse qui n'ont plus de question dans la table... Et la c'est juste un début si on s'amuse avec "si Question= NON" (donc n'existe pas dans la table) c'est déjà plus sportif.
    Dans ces cas la, la seul solution que j'ai trouvé c'est de jouer sur les ensemble. Une requête d'un bout qu'on soustrait à une autre requête, un 1-All au passage pour virer les truc etc, etc...

    Intellectuellement c'est intéressant mais voila mon petit cerveau a ses limites Vous rajoutez 5 colonnes à la table avec des requêtes si A présent, B absent, C =3 mais D= tous sauf 4 et c'est plus faisable, j'arrive plus a visualiser le truc.
    Je recherche un tuto qui traite des opérations sur des ensemble (integration, exclusion, addition) mais a la mode c# que je comprenne les méthode de requêtes correspondante.

    Je sais pas si j'ai était totalement claire et je m'en excuse je suis dans le brouillard

    ++

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var lst = from t in lst
    where t.Q != 1
    select t;
    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  5. #5
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 72
    Points : 135
    Points
    135
    Par défaut
    Salut !

    Un autre truc qui pourrait t'être utile. C'est LINQPad 5. ( http://www.linqpad.net/ )
    Il existe en plusieurs version, dont 1 gratuite.

    C'est un outil qui te permet de tester tes requêtes hors visual studio et hors code.
    Il y a plusieurs exemples de codes que tu peux tester et tu peux en importer de nouveaux.

    Perso je connecte la base sql sur laquelle je travaille, puis je prépare mes requetes.

    Amicalement

Discussions similaires

  1. LINQ clause where + ID entity
    Par Kikuts dans le forum Linq
    Réponses: 2
    Dernier message: 15/04/2011, 14h09
  2. ADO.NET / Linq / Entity Framework
    Par alex61 dans le forum Accès aux données
    Réponses: 4
    Dernier message: 31/01/2011, 13h39
  3. Réponses: 16
    Dernier message: 21/12/2010, 09h31
  4. Linq - Entity Framework
    Par Jfrancois57 dans le forum Framework .NET
    Réponses: 11
    Dernier message: 12/02/2008, 08h06

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