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

C# Discussion :

Linq to Object, reflexion et expression


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Développeur .NET
    Inscrit en
    Mai 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2012
    Messages : 13
    Par défaut Linq to Object, reflexion et expression
    Bonjour, je suis coincé dans un logiciel, donc je vous ai remis un équivalent dans un petit programme console qui produit la même erreur.
    La requete en commentaire produit le résultat désiré, j'essaye tout simplement de la refaire sous une autre forme
    Voici le code :
    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
    using System.Linq;
    using System.Linq.Expressions;
     
    using System.Collections.Generic;
    using System.Collections;
    using System.Reflection;
    using System;
     
    namespace ConsoleApplication1
    {
        class Program
        {
            class Personne
            {
                public string Nom { get; set; }
                public string Prenom { get; set; }
            }
     
            static void Main(string[] args)
            {
     
                List<Personne> Liste = new List<Personne>();
                Liste.Add(new Personne() { Nom = "toto", Prenom = "JP" });
                Liste.Add(new Personne() { Nom = "Lagaffe", Prenom = "Gaston" });
     
     
     
     
     
                IEnumerable RequeteLinq;
                PropertyInfo propriete = typeof(Personne).GetProperty("Nom");
     
                /*
                RequeteLinq = Liste.Where(p => propriete.GetValue(p, new object[0]).ToString().StartsWith("toto"));
                */
     
     
                var p = Expression.Parameter(typeof(object), "p");            
                Expression G = Expression.Call(
                           Expression.Constant(propriete),
                           typeof(System.Reflection.PropertyInfo).GetMethod("GetValue", new System.Type[] { typeof(object), typeof(object[]) }),
                           Expression.Constant(p),
                           Expression.Constant(new object[0]));
     
                G = Expression.Call(G, typeof(object).GetMethod("ToString", new Type[0]));
                G = Expression.Call(
                            G,
                            typeof(string).GetMethod("StartsWith", new[] { typeof(string) }),
                            Expression.Constant("toto"));
     
                var lambda = Expression.Lambda<Func<object, bool>>(G, p);
                var predicat = lambda.Compile();
                RequeteLinq = Liste.Where(predicat);
     
                foreach (object req in RequeteLinq)
                    Console.WriteLine(req);
     
                Console.ReadLine();
     
          }
        }
    }
    je sais qu'on peut avoir le résultat attendu simplement avec du linq to object, sans expression et reflexion, mais j'en ai besoin pour mon logiciel

    Donc l'erreur est sur mon foreach, quelqu'un sait pourquoi ?

    merci,
    Zunk

  2. #2
    Membre averti
    Profil pro
    Développeur .NET
    Inscrit en
    Mai 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2012
    Messages : 13
    Par défaut
    Résolu merci, le problème venait de là (IEnumerable<Personne>), mais également du Expression.Constant(p), il fallait juste mettre p en faite

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. LINQ to SQL et LINQ to Object
    Par ronki dans le forum C#
    Réponses: 1
    Dernier message: 26/03/2010, 20h05
  2. [Linq To Object] Comparer 2 listes.
    Par Gregory.M dans le forum Linq
    Réponses: 1
    Dernier message: 29/05/2009, 09h24
  3. Convertir une requête XPath avec LINQ to Objects
    Par SaumonAgile dans le forum Linq
    Réponses: 3
    Dernier message: 08/05/2009, 15h54
  4. [LINQ To Object] Sous-ensemble d'une liste
    Par farfadet dans le forum Linq
    Réponses: 6
    Dernier message: 17/11/2008, 23h31
  5. Problème linq to object
    Par Fayoul dans le forum Linq
    Réponses: 2
    Dernier message: 19/03/2008, 21h53

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