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 :

Création de requête dynamiquement via la classe System.LINQ.Dynamic sur fichier XML


Sujet :

Linq

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 10
    Points : 10
    Points
    10
    Par défaut Création de requête dynamiquement via la classe System.LINQ.Dynamic sur fichier XML
    Bonsoir à tous,
    cela fait plusieurs jours que je cherches à créer une requette Linq to xml dynamiquement en fonction des critères définit par l'utilisateur.

    J'ai trouvé la classe System.LINQ.Dynamic qui est sensée pouvoir le faire mais je ne parviens absolument pas à générer ma requete sur du xml ! Tous les exemples que je trouve son sur du linq to sql.

    En bref je souhaite construire mes différentes clauses where via un string.

    Voici mon code Linq actuel que je souhaite transformer en dynamic.
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
     
     
    Dim docAnnonce As XDocument = <?xml version="1.0" encoding="utf-8"?>
                                   <Diaporama>
                                       <annonce id="0">
                                           <mandat>1106ALX2150811</mandat>
                                           <titre>Corolla Verso</titre>
                                           <prix>14900,00</prix>
                                           <garantie/>
                                           <motorisation>Diesel</motorisation>
                                           <boiteVitesse>M</boiteVitesse>
                                           <DateImmat>28/02/2008 00:00</DateImmat>
                                           <kilometrage>58033</kilometrage>
                                           <couleur>Gris Clair</couleur>
                                           <nbportes>5</nbportes>
                                           <cvfiscaux>8</cvfiscaux>
                                           <puissancedin/>
                                           <options/>
                                           <lieu>NARBONNE</lieu>
                                           <nomgarage>Evolution Auto</nomgarage>
                                           <adresse>Rue E.Delamarre Deboutiville</adresse>
                                           <codepostal>11000</codepostal>
                                           <ville>NARBONNE</ville>
                                           <tel>04.68.42.29.00</tel>
                                           <images>
                                               <image>1293194A.jpg</image>
                                               <image>1293194B.jpg</image>
                                               <image>1293194C.jpg</image>
                                               <image>1293194D.jpg</image>
                                           </images>
                                       </annonce>
                                       <annonce id="1">
                                           <mandat>1106ALX2150811</mandat>
                                           <titre>Corolla Verso 1</titre>
                                           <prix>12400</prix>
                                           <garantie/>
                                           <motorisation>Essence</motorisation>
                                           <boiteVitesse>M</boiteVitesse>
                                           <DateImmat>23/01/2007 00:00</DateImmat>
                                           <kilometrage>89032</kilometrage>
                                           <couleur>Gris Clair</couleur>
                                           <nbportes>5</nbportes>
                                           <cvfiscaux>8</cvfiscaux>
                                           <puissancedin/>
                                           <options/>
                                           <lieu>NARBONNE</lieu>
                                           <nomgarage>Evolution Auto</nomgarage>
                                           <adresse>Rue E.Delamarre Deboutiville</adresse>
                                           <codepostal>11000</codepostal>
                                           <ville>NARBONNE</ville>
                                           <tel>04.68.42.29.00</tel>
                                           <tel>04.68.42.29.01</tel>
                                           <images>
                                               <image>1293194A.jpg</image>
                                               <image>1293194B.jpg</image>
                                               <image>1293194C.jpg</image>
                                               <image>1293194D.jpg</image>
                                           </images>
                                       </annonce>
                                       <annonce id="2">
                                           <mandat>1106ALX2150811</mandat>
                                           <titre>Corolla Verso 2</titre>
                                           <prix>14900,00</prix>
                                           <garantie/>
                                           <motorisation>Diesel</motorisation>
                                           <boiteVitesse>A</boiteVitesse>
                                           <DateImmat>28/02/2008 00:00</DateImmat>
                                           <kilometrage>58033</kilometrage>
                                           <couleur>Gris Clair</couleur>
                                           <nbportes>5</nbportes>
                                           <cvfiscaux>8</cvfiscaux>
                                           <puissancedin/>
                                           <options/>
                                           <lieu>NARBONNE</lieu>
                                           <nomgarage>Evolution Auto</nomgarage>
                                           <adresse>Rue E.Delamarre Deboutiville</adresse>
                                           <codepostal>11000</codepostal>
                                           <ville>NARBONNE</ville>
                                           <tel>04.68.42.29.00</tel>
                                           <images>
                                               <image>1293194A.jpg</image>
                                               <image>1293194B.jpg</image>
                                               <image>1293194C.jpg</image>
                                               <image>1293194D.jpg</image>
                                           </images>
                                       </annonce>
                                       <annonce id="3">
                                           <mandat>1106ALX2150811</mandat>
                                           <titre>Corolla Verso 3</titre>
                                           <prix>1490</prix>
                                           <garantie/>
                                           <motorisation>Essence</motorisation>
                                           <boiteVitesse>M</boiteVitesse>
                                           <DateImmat>28/02/2008 00:00</DateImmat>
                                           <kilometrage>58033</kilometrage>
                                           <couleur>Gris Clair</couleur>
                                           <nbportes>5</nbportes>
                                           <cvfiscaux>8</cvfiscaux>
                                           <puissancedin/>
                                           <options/>
                                           <lieu>NARBONNE</lieu>
                                           <nomgarage>Evolution Auto</nomgarage>
                                           <adresse>Rue E.Delamarre Deboutiville</adresse>
                                           <codepostal>11000</codepostal>
                                           <ville>NARBONNE</ville>
                                           <tel>04.68.42.29.00</tel>
                                           <images>
                                               <image>1293194A.jpg</image>
                                               <image>1293194B.jpg</image>
                                               <image>1293194C.jpg</image>
                                               <image>1293194D.jpg</image>
                                           </images>
                                       </annonce>
                                   </Diaporama>
     
    Dim ann = From d In docAnnonces...<annonce> _
                  Where d.<nbportes>.Value = "4" _
                  Let annonceID As Integer = d.@<id> _
                  Let ordre As Integer = d.<ordre>.Value _
                  Let datedebut = d.<datedebut>.Value _
                  Let datefin = d.<datefin>.Value _
                  Let theme = d.<theme>.Value _
                  Let ecran As Integer = d.<ecran>.Value _
                  Let repet As Integer = d.<repetition>.Value _
                  Let photos = d.<images>.Value _
                  Order By ordre Ascending
    Voici les site que j'ai trouvé qui parle du sujet mais impossible de trouver la bonne syntaxe !
    http://kenanbek.com/site/post/dynami...xt-at-runtime/
    http://weblogs.asp.net/scottgu/archi...y-library.aspx

    Quelqu'un à t il déjà exploré le sujet ? Help me please c'est super important et je nage complètement là

    Merci d'avance

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2011
    Messages : 15
    Points : 25
    Points
    25
    Par défaut
    Bonjour Sharkus,

    C'est très difficile.
    Tu as utilisé une drôle forme de LinqToXML en VB.NET. Cette forme n'est pas supporté par ces deux composant. Tu as besoin de les étendre.
    J'ai écrit des codes pour te donner du allusion.
    Tu peut remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim ann = From d In docAnnonce...<annonce> _
      Where("@id.Value = ""1"" And <prix>.Value = ""12400""") _
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim ann = docAnnonce.Where()
    et
    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
    28
    29
    30
    31
    32
    33
    34
     
    //Je suis désolé, c'est C#
    using System.Linq.Expressions;
    using System.Xml.Linq;
     
    namespace MyLinqTest
    {
        public static class XDynamic
        {
            public static IQueryable<XElement> Where(this XDocument xdoc)
            {
                IQueryable<XElement> query
                    = xdoc.Element("Diaporama").Elements("annonce").AsQueryable();
     
                Type sorceType = query.ElementType;
                ParameterExpression p = Expression.Parameter(sorceType);
     
                Expression parameterValue = Expression.Constant(XName.Get("id"));
                Expression left = Expression.Call(p, "Attribute", null, parameterValue);
                left = Expression.Property(left, "Value");
                left = Expression.Equal(left, Expression.Constant("1"));
     
                parameterValue = Expression.Constant(XName.Get("prix"));
                Expression right = Expression.Call(p, "Element", null, parameterValue);
                right = Expression.Property(right, "Value");
                right = Expression.Equal(right, Expression.Constant("12400"));
     
                Expression body = Expression.And(left, right);
                LambdaExpression condition = Expression.Lambda(body, p);
     
                return query.Where(condition as Expression<Func<XElement, bool>>);
            }
        }
    }

  3. #3
    Membre émérite

    Homme Profil pro
    Software Developer
    Inscrit en
    Mars 2008
    Messages
    1 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Software Developer

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 470
    Points : 2 369
    Points
    2 369
    Par défaut
    Pourquoi ne fait-tu pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim ann = From d In docAnnonces.Diaporama.annonce _
                  Where d.@nbportes = "4" _
                  Order By ordre Ascending
     
    For Each(annonce as XElement in ann)
    MessageBox.Show("ID=" + annonce.@id + ", Ordre=" + annonce.@ordre + "...")
    EN VB cela est tres simple contrairement au C# qui n'est pas aussi avancé en ce domaine.

    Visual Studio peux aussi te proposer tes noeuds XML et tes attributs a chaque fois que tu appuie sur la touche "." (intellisense) si tu référence ton fichier. Cela te simplifira grandement les choses sont la structure de ton document xml est figée, et cela t'aidera a mieux débuter.

    Bon courage.

Discussions similaires

  1. [MySQL] création de colonne dynamique via une variable php
    Par xKryckx dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 09/04/2015, 18h47
  2. Requête SQL via une classe abstraite.
    Par Fekix dans le forum C#
    Réponses: 0
    Dernier message: 05/12/2014, 11h26
  3. [WD15] Création de requêtes dynamiques
    Par thierrybatlle dans le forum WinDev
    Réponses: 5
    Dernier message: 23/10/2010, 02h36
  4. Réponses: 3
    Dernier message: 04/08/2008, 15h35
  5. Réponses: 1
    Dernier message: 01/08/2008, 17h25

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