Как построить мембранную экспрессию? - PullRequest
0 голосов
/ 01 марта 2019

Ниже приведены мои классы:

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

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

Если я хочу использовать выражение для выражения b.j>3, я могу сделать это так:

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);

Теперь, как я могупостроить выражение для b.a.i>3?

1 Ответ

0 голосов
/ 01 марта 2019

Просто создайте еще один MemberExpression на основе предыдущего:

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);
...