简体   繁体   中英

How to build memberexpression of memberexpression?

Below are my classes:

public class A
{
    public int i { get; set; }
}

public class B
{
    public A a { get; set; }
    public int j { get; set; }
}

If I want to use expression to express bj>3 , I can do it like this:

ParameterExpression parameter = Expression.Parameter(typeof(B), "b");
MemberExpression member = Expression.PropertyOrField(parameter, "j");            
ConstantExpression constant = Expression.Constant(3);
return Expression.Lambda<Func<B, bool>>(Expression.GreaterThan(member, constant), parameter);

Now, how can I build an expression for bai>3 ?

Just create another MemberExpression based on the previous one:

ParameterExpression parameter = Expression.Parameter(typeof(B), "b");
MemberExpression memberA = Expression.PropertyOrField(parameter, "a");

// Use the previous MemberExpression here:
MemberExpression memberI = Expression.PropertyOrField(memberA, "i");

ConstantExpression constant = Expression.Constant(3);
return Expression.Lambda<Func<B, bool>>(Expression.GreaterThan(memberI, constant), parameter);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM