【发布时间】:2021-02-19 18:13:34
【问题描述】:
我正在尝试创建一个表达式树绑定,如果属性可用,它将创建一个对象,如果不可用,则放置 null。例如,我想最终得到:
personModel = car.Person == null ? null : new PersonModel()
但无论我尝试什么都失败了。
我试过合并
Expression.Coalesce(
Expression.Property(param, "Person"),
Expression.MemberInit(Expression.New(typeof(PersonModel)), MemberAssignment[])
)
这会抛出System.ArgumentException: 'Argument types do not match'。我假设表达式树期望在合并中放置相同的类型 - 因为我有一些可以在上述场景中工作的可空枚举。
我尝试了条件
Expression.Condition(
Expression.Equal(Expression.Property(param, "Person"), Expression.Constant(null)),
Expression.MemberInit(Expression.New(typeof(PersonModel)), MemberAssignment[]),
Expression.Constant(null)
)
这也会抛出System.ArgumentException: 'Argument types do not match',因为真正的块有Expresison.MemberInit,而错误的块有Expression.Constant。
有没有办法让 像这样工作?
【问题讨论】:
标签: c# .net entity-framework linq expression