12
votes

Obtenir la valeur d'une propriété O => O.Property1, définie à Lambda

J'ai besoin d'obtenir la valeur d'une propriété définie dans une utilisation Lambda xxx

L'utilisation prévue est quelque chose comme: xxx


< Pré> xxx

4 commentaires

La valeur d'une propriété? O => O.Name retournera la valeur.


Le nom de la propriété ou la valeur de "nom"?


@ Yodaj007, @maartenba la valeur de la propriété, pas le nom


Pas totalement sûr, mais cela devrait fonctionner: VAILLE VALEUR = PROP.COMPILE (). INVOKE (HTML.VIEWDATA.MODEL);


4 Réponses :


3
votes

omu,

Vous allez ici (je suppose que vous voulez dire que le nom réel dérivé de la propriété Lambda): xxx

utilisation: < PRE> XXX

Profitez ..

[EDIT] - vient de voir que c'est la valeur que vous après. Voici un peu soulevé du projet subsonique qui correspond à cela pour vous: xxx

utilisation: xxx

THA au-dessus de la parseexpression () Devrait vous permettre de trouver le plus tout ce dont vous avez besoin sur votre expression.


2 commentaires

J'ai besoin de la valeur et non du nom, le nom que je reçois avec expresshelper.getexpressionText (Prop)


Il serait vraiment utile pour moi de savoir pourquoi le bilculasse est survenu. Je suis juste un garçon de pays ignorant essayant d'apprendre :)



12
votes

Pourquoi avez-vous besoin d'une expression ici? Si vous voulez seulement avoir une valeur de la propriété, Func CODE> est suffisant - c'est comme n'importe quel autre délégué, il suffit d'invoquer:

public static MvcHtmlString MyHelper<T, TProperty>(
    this HtmlHelper<T> html,
    Func<T, TProperty> prop)
{
    var obj = // ??
    var value = prop(obj); \\ get the value of Prop1 (not the name "Prop1")
    ...
}


1 commentaires

Je pense que vous avez oublié de changer le type d'argument en Func , car l'expression doit être compilée avant d'invoquer.



1
votes

omu,

darn la limite de 30k ici :). J'ai dû ajouter la classe de constructions comme une réponse séparée. grr .. xxx

rejoindre avec réponse précédente et cuire pendant 2 secondes ... Désolé, cette "réponse" est tellement verbeuse, tout est normalement emballé en subsonse, de même que une doublure pour moi.


0 commentaires

8
votes

Vous pouvez le faire de Jim ou juste faire ceci:

public static MvcHtmlString MyHelper<T, TProperty>(
        this HtmlHelper<T> html, Expression<Func<T, TProperty>> prop)
    {
        var func = prop.Compile();
        var value = func(html.ViewData.Model);
    }


0 commentaires