如何将子属性添加到表达式?

时间:2018-03-29 00:09:42

标签: c# lambda

例如使用这个类:

Public class InnerClass
{
    string Value {get;set;}
}

public class ObjectClass
{
    InnerClass Inner {get; set;}
}

用这样的方法:

public void SomeMethod<TObj, T>(Expression<Func<TObj, T>> exp) where T : InnerClass
{
    // ??
}

我需要添加&#34;价值&#34;财产到exp。

调用方法:

SomeMethod(x => x.Inner);

我需要为表达式添加值:

x => x.Inner.Value

3 个答案:

答案 0 :(得分:0)

告诉它你正在使用什么类型,否则它不会知道:

SomeMethod<ObjectClass, InnerClass>(k => k.Inner);

答案 1 :(得分:0)

将您的方法更新为

public void SomeMethod<TObject>(Expression<Func<TObject, object>> exp)
{
     .....
}

然后你可以访问该属性

SomeMethod<ObjectClass>(x => x.Inner.Value);

答案 2 :(得分:0)

最后这项工作对我来说:

public void SomeMethod<TObj, T>(Expression<Func<TObj, T>> exp) where T : InnerClass
{
    var newExp = Expression.Lambda<Func<TObj, string>>(
        Expression.PropertyOrField(exp.Body, "Value"),
        exp.Parameters);

    // now I can use newExp
}

从这里开始:Adding a node/property to an Expression Tree