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 XML] - Requête sous forme de string


Sujet :

Linq

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 51
    Par défaut [Linq To XML] - Requête sous forme de string
    Bonjour à tous!

    N'ayant pas trouvé sur le net [bien que cela soit du .net], je tente ma chance ici !

    Savez-vous si on peut créer des clauses Where avec des conditions en string.

    Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    IEnumerable<XElement> elements = from el in datasource
    where (string) el.Attribute("name").Value == "toto"
    and (string) el.Attribute("pseudo").Value == "titi"
    select el;
    Pourrait il être transformé en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    string query = "name == 'toto' && pseudo=='titi'";
    IEnumerable<XElement> elements = datasource.Where(query).Select(?);
    Contexte: la clause Where joue le role pour moi de filtre. Ce filtre peut être composé de plusieurs tests d'égalité dont je ne connais pas le nombre à l'avance.

    Merci de votre aide

  2. #2
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    faire des requêtes linq en string c'est possible via System.Linq.Dynamic mais ce n'est pas une bonne idée pour ton problème.

    Une meilleur approche :

    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
    IQueryable<T> q = datasource;
     
    if(...)//j'ai envie de fitrer le name
    {
    q = q.Where(el => (string) el.Attribute("name").Value == "toto");
    }
     
    if(...)//j'ai envie de filtrer le pseudo
    {
    q = q.Where(el => (string) el.Attribute("pseudo").Value == "titi");
    }
     
    // ...
     
    IEnumerable<XElement> elements = q.ToList()

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 51
    Par défaut
    Mais avec cette solution je ne peut appliquer les deux conditions en même tps...

  4. #4
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    bien sur que si !

    Tout dépend de ce que tu veux mettre dans les if

    si tu écris ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IQueryable<T> q = datasource;
    q = q.Where(el => (string) el.Attribute("name").Value == "toto");
    q = q.Where(el => (string) el.Attribute("pseudo").Value == "titi");
    IEnumerable<XElement> elements = q.ToList()
    Les 2 conditions sont bien prises en compte car à chaque fois on modifie la query dans la variable q.

    Tout dépend de comment tu veux ajouter où non un test pas ça c'est à voir dans ton application et la problématique serait la même avec la création d'un string

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 51
    Par défaut
    heu je ne comprend pas..

    tu veux bien dire que
    contiendra à les 2 clauses where ?!

    et qu'ainsi le fait de faire deux affectations équivaut à (en qqsorte)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    q += q.Where(....)

  6. #6
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    En fait quand tu fais un where tu créer une nouvelle requête (IQueryable) avec un filtre supplémentaire, à chaque ligne q est une nouvelle requête ciblant un sous ensemble plus petit du q de la ligne précédente.

    le q.ToList() exécute la requête une fois qu'on a fini de la préparer et renvoi les simplement les résultats

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/09/2012, 16h07
  2. [JDOM] Parser du xml sous forme de string avec JDOM
    Par Lord Yu dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 02/02/2010, 12h47
  3. Afficher le resultat de l'execution d'une requête sous forme d'un formulaire
    Par samirdannoune dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 26/07/2006, 18h21
  4. [JDBC] récuperer n'importe quel champ sous forme de String
    Par Hervé Saladin dans le forum JDBC
    Réponses: 3
    Dernier message: 31/05/2006, 10h04
  5. [Stratégie]Résultat d'une formule sous forme de String
    Par leminipouce dans le forum Langage
    Réponses: 12
    Dernier message: 21/02/2006, 11h40

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