4

我正在尝试创建一个动态 lambda 表达式(从文本解析),它执行多个任务。创建单独的作业相当容易,但是我被困在如何组合它们上。所以我想要实现的是相同的:

Action<Entity> action = (entity) => 
{ 
    entity.Property1 = "1"; 
    entity.Property2 = "2";
};

有没有办法将多个 Expression.Assign 表达式组合成一个(因为 Expression.Lambda 只接受一个 Expression 作为输入)?

--编辑:所以为了澄清我写的代码只是伪代码,所以错字(现在更正)不会改变任何东西。我现在拥有的代码类似于:

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个,仅用于演示目的。我的问题是,是否有一个表达式可以让我组合赋值表达式,还是我必须为每个表达式创建不同的 lambda?

4

1 回答 1

4

试试这个魔法:

Expression.Block(first, second);
于 2012-05-07T14:47:23.263 回答