如何将动态值转换为表达式中的类型值

Kur*_*oro 6 c# linq expression

public class Model1 {
    public String Value { get; set; }

}
public class Model2 {
    public dynamic Value { get; set; }
}

public static Expression<Func<Model2, Model1>> GetExpression() {
    return f => new Model1 {
        Value = f.Value
    };
}
Run Code Online (Sandbox Code Playgroud)

我正在写一个GetExpression()Model2属性转换为Model1.谈到动态财产,我尝试Convert.ToString(f.Value)或者(String)f.Value说它

"表达式树可能不包含动态操作"

任何人都知道在表达式中将动态值转换为类型值的正确方法是什么?

Mar*_*ell 4

做到这一点的唯一方法是说服表达式编译器忽略dynamic

return f => new Model1
{
    Value = (string)(object)f.Value
};
Run Code Online (Sandbox Code Playgroud)

或者

return f => new Model1
{
    Value = Convert.ToString((object)f.Value)
};
Run Code Online (Sandbox Code Playgroud)

对于其他任何东西,都会有隐式动态转换,这是不受支持的。这只是进行了硬转换。

f.Value 然而,坦率地说,我想知道,成为dynamic第一名是否有多大价值。