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 :

Optimisation requête XML - LinQ


Sujet :

Linq

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Points : 46
    Points
    46
    Par défaut Optimisation requête XML - LinQ
    Bonjour,

    Est-ce qu'il y a possibilité d'améliorer les requêtes ?

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    IEnumerable<XElement> query = from job in xDoc.Descendants("Job")
                                  where job.Value.ToUpper().Contains(search.ToUpper())
                                  select job;
     
    foreach (XElement job in query)
    {
        IEnumerable<XElement> query2 = from record in job.Descendants("Record")
                                       where record.Attribute("Identifier") != null
                                       && record.Attribute("Identifier").Value.Equals("ROOT")
                                       select record;
     
        foreach (XElement record in query2)
        {
            IEnumerable<XElement> query3 = from property in record.Descendants("Property")
                                           where property.Attribute("Name") != null
                                           && property.Attribute("Name").Value.Equals("Category")
                                           select property;
     
            foreach (XElement property in query3)
            {
                jobs.Add(property.Value + "\\" + job.Attribute("Identifier").Value);
     
                numberOfResults++;
            }
        }
    }
    Document XML du style :

    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
     
    <Root>
        <Job Identifier="NOM">
            <Record Identifier="ROOT">
                <Property Name="Category">\Chemin\...</Property>
                ...
            </Record>
            <Record Identifier="TEST">
                <Property Name="Category">\Chemin\...</Property>
                ...
            </Record>
            ...
        </Job>
        ...
    </Root>
    Merci.

  2. #2
    Membre expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Points : 3 543
    Points
    3 543
    Par défaut
    Bonjour,

    En fait, si ta structure XML ne contient pas d'autre propriété "Category", je pense que tu peux procéder comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    IEnumerable<XElement> query3 = from property in xDoc.Descendants("Property")
                                                       where property.Attribute("Name") != null &&
                                                             property.Attribute("Name").Value.Equals("Category") &&
                                                             property.Ancestors("Job").Any(j => j.Value.ToUpper().Contains(search.ToUpper()))
                                                       select property;
     
                        foreach(XElement property in query3)
                        {
                            jobs.Add(property.Value + "\\" + job.Attribute("Identifier").Value);
     
                            numberOfResults++;
                        }
    Car à partir du moment où tu utilises "Descendants", il va parcourir tous les niveaux à la recherche d'un élément correspondant. L'idée est de ne prendre que ceux dont un ancêtre "JOB" correspond à ta recherche.
    Maintenant, ça simplifie le code, mais il peut-être intéressant d'effectuer une comparaison au niveau des performances et aussi peut-être de regarder du cote de XPath qui se révèlera peut-être plus efficace dans ce contexte.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Points : 46
    Points
    46
    Par défaut
    Merci pour ta réponse, c'est plus rapide mais je n'arrive pas à récupérer le nom du job avec ta méthode du coup je laisse tel que.. merci.

Discussions similaires

  1. Optimisation d'utilisation LINQ to XML
    Par Invité dans le forum C#
    Réponses: 0
    Dernier message: 04/02/2013, 10h28
  2. Requête de LINQ To XML
    Par Ivynox dans le forum Linq
    Réponses: 2
    Dernier message: 04/06/2010, 13h22
  3. Linq - question optimisation requête
    Par boby62423 dans le forum Linq
    Réponses: 2
    Dernier message: 07/04/2009, 18h19
  4. optimisation requête
    Par alex2205 dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 09/02/2005, 14h15
  5. optimisation requête SQL!!! help!!
    Par anathem62 dans le forum Requêtes
    Réponses: 2
    Dernier message: 24/05/2004, 16h26

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