Comment tirer profit d'une expression lambda?

.net c# expression-trees lambda

Question

J'ai cette classe:

public class CustomerFilter
{
    public int Id { get; set; }
    public int Name { get; set; }
}

Et c'est utilisé comme ça:

public class Search
{
    private Expression<Func<CustomerFilter, bool>> customerfilter;

    public Expression<Func<CustomerFilter, bool>> CustomerFilter
    {
        set { customerfilter = value; }
    }
}

var search = new Search();
search.CustomerFilter = (x => x.Id == 1);

À partir de la classe de recherche, comment puis-je obtenir la valeur d'une propriété sans utiliser ExpressionVisitor ? Quelque chose comme:

var customerId = customerFilter.Id; //Or something similar

Réponse populaire

Si votre CustomerFilter ne prend en charge que MemberExpression==ConstantExpression comme dans votre exemple de code. Ensuite, vous pouvez obtenir les informations directement à partir de l'objet Expression .

var propertyName = ((MemberExpression)((BinaryExpression)customerfilter.Body).Left).Member.Name;
var propertyValue = ((ConstantExpression)((BinaryExpression)customerfilter.Body).Right).Value;

Si vous souhaitez prendre en charge des expressions plus complexes, ExpressionVisitor doit être utilisé pour analyser l’arbre des expression .



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi