我正在尝试创建一个动态lambda表达式(从文本解析),它执行多个赋值。创建个人作业相当容易,但我仍然坚持如何将它们组合起来。所以我想要实现的目标与:
相同Action<Entity> action = (entity) =>
{
entity.Property1 = "1";
entity.Property2 = "2";
};
有没有办法将多个Expression.Assign表达式合并为一个(因为Expression.Lambda只接受一个表达式作为输入)?
- 编辑: 因此,为了澄清我写的代码只是伪代码,所以错字(现在已更正)不会改变任何东西。我现在的代码是这样的:
Expression parameter = Expression.Parameter(typeof(Entity), "param");
Expression firstProperty = Expression.Property(parameter, "Property1");
Expression first = Expression.Assign(firstProperty, "1");
Expression secondProperty = Expression.Property(parameter, "Property2");
Expression second = Expression.Assign(secondProperty, "2");
Expression final = [INSERT MAGIC HERE]
Action<Entity> action = Expression.Lambda<Action<Entity>>(final, entity).Complie();
请注意,属性名称实际上来自文本输入,并且分配表达式的数量不限于2,它仅用于演示目的。我的问题是,是否有一个表达式让我组合分配表达式,还是我必须为每个表达式创建不同的lambdas?
答案 0 :(得分:4)
试试这个魔法:
Expression.Block(first, second);