为子属性测试生成表达式树

时间:2011-03-21 11:43:48

标签: c# linq

我想为这样的语句生成一个LambdaExpression:

Adress (p => p.Person.Name == "Mike")

其中Person是一个具有名称属性的类。

我无法用Expression.Property实现此目的。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

假设p的类型是PersonContainer:

    // p => p.Person.Name == "Mike"
ParameterExpression par = Expression.Parameter(typeof(PersonContainer), "p");
BinaryExpression beEq = Expression.Equal(
    Expression.Property(
        Expression.Property(par, "Person"), 
        "Name"),
    Expression.Constant("Mike"));

Expression<Func<PersonContainer, bool>> expr = Expression.Lambda<Func<PersonContainer, bool>>(beEq, par);