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 :

Multiples "paramètres" dans une expression lambda


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Par défaut Multiples "paramètres" dans une expression lambda
    Bonjour,

    Context :
    Nous avons un objet écrit par nos soins se chargeant de faire la pagination / sort / filtre sur une table.
    Celui-ci est de type Table<T> where T : Interface.
    Ce qui nous permet d'obtenir toujours les mêmes tables mais typées selon le type d'objet qu'elle contient.

    Nous aimerions (afin de nous faciliter la tâche dans les différentes vues (ASP.NET MVC 3)) pouvoir écrire quelque chose comme :

    @Html.Table(LaTable, table => ElementDeLaTable.Property1, ElementDeLaTable.Property2).

    Cet appel aurait pour but de créer la table (en html) en fonction des différentes propriétés passées par l'expression lambda.

    Malheureusement, nous ne somme pas encore arrivés à écrire l'expression pour qu'elle accepte plusieurs paramètres comme cités ci-dessus.

    En plus de cela, il faudrait que l'expression lambda connaisse le type T de la table afin de pouvoir acceder aux différentes propriétés du type.

    Quelqu'un aurait-il des conseils / examples sur la façon de procéder ?

    Oui, ce post pourrait-être dans la section Développement Web puisqu'il s'agit de produire un output web, mais l'intention reste les expressions lambdas.

    Merci pour votre aide.

  2. #2
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Bonjour,

    Bon j'ai pas tout suivi de la demande, donc je répondrais uniquement sur ce que je sais, comment écrire une expression lambda à plusieurs paramètres, avec un exemple (totalement bidon) concaténant les résultats d'une "requête" en vue d'un affichage (voir la documentation de Aggregate):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var query = //... query est un IEnumerable
     
    string output = 
        query
        .Aggregate (
            New StringBuilder (),
            (state, current) => state.Append (current), // c'est ici que cela te concerne
            finalState => finalState.ToString()
        );
    Cordialement !

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    C'est un truc comme ça que tu veux ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        public static void Table<T>(this HtmlHelper helper, Table<T> table, params Expression<Func<T, object>>[] propertySelectors)
        {
            foreach (var selector in propertySelectors)
            {
                var expr = selector.Body as MemberExpression;
                if (expr == null)
                    throw new ArgumentException("The body must be a member access expression");
                string propertyName = expr.Member.Name;
     
                ...
            }
        }
    En fait, si j'ai bien compris ton histoire, tu n'as pas besoin d'une expression lambda à plusieurs paramètres, mais de plusieurs paramètres de type expression lambda...

  4. #4
    Membre averti
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Par défaut
    C'est exactement ca que je cherchais, merci pour vos réponses.

    En effet, après y avoir réfléchi, ce n'est pas une expression lambda avec plusieurs paramètres, mais plusieurs expressions lambda.

  5. #5
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    bon ben moi j'avais rien compris tant pis, toute information peut toujours rester utile

    Cordialement !

  6. #6
    Membre averti
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Par défaut
    Une question reste en suspend :

    Comment appeler ce helper puisque je n'ai rien sur quoi basé mon expression lambda (ou alors j'ai raté quelque chose).

    Pour l'appeler je devrais faire quelque chose comme :

    @Html.Table(table, ??? => ???.???, ??? => ???.???)

    Ma table contient elle-même une liste de type<T> d'élément et c'est mon helper qui parcourt cette liste pour en récupérer le displayname et sa valeur.

    Une idée ? (J'ai comme une impression de pas être clair du tout sur ce coup la ...)

    EDIT :

    Je suis parvenu à l'utiliser avec 1 expression :
    @Html.Table(Model, Person => Person.FullName)

    Mais comment passer une deuxième expression ?

    Quand je fais :

    @Html.Table(Model, Person => Person.FullName, Person => Person.LastMembershipApproval)

    La deuxième expression lance une exception comme quoi le field n'existe pas.

    Une idée ?

    EDIT 2 :

    Il semblerait que ca passe, mais uniquement avec des property de type string. Quelqu'un pourrait m'expliquer pourquoi ?

    Merci bien.

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

Discussions similaires

  1. [Débutant] passer d'un tableau à une liste dans une expression lambda
    Par Hepil dans le forum Linq
    Réponses: 8
    Dernier message: 25/06/2013, 17h23
  2. [RegEx] Simple ou double quote dans une expression régulière
    Par Khleo dans le forum Langage
    Réponses: 2
    Dernier message: 27/12/2010, 15h58
  3. Réponses: 2
    Dernier message: 09/08/2010, 15h41

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