2012-05-07 49 views
4

我正在尝试创建一个动态lambda表达式(从文本解析),它执行多个赋值操作。创建个人作业相当简单,但我坚持如何将它们合并。所以,我想要实现是一样的:在一个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(); 

注意,酒店名称实际上是来自文本输入,并分配新建分配FY式的数量不限于2,它只是用于演示目的。我的问题是,有没有一个表达式可以让我结合assigment表达式,还是我必须为每个表达式创建不同的lambda表达式?

+3

,你不是第二次分配后缺少一个分号?无论如何,就我所知,表达式的数量没有限制。 [MSDN](http://msdn.microsoft.com/en-us/library/bb397687.aspx) –

+0

你收到了什么编译错误? –

+0

更新了描述。我没有收到编译器错误,只有运行时,如果我尝试Expression.And例如哪些是正确的,因为Property1 =“1”&& Property2 =“2”无效。 –

回答

3

试试这个神奇:

Expression.Block(first, second); 
+0

这就是我正在寻找的东西,像魅力一样工作,谢谢! –

+0

不幸的是.net 3.5中不存在:/ – Mic

+0

@Mic .NET 3.5表达式树只支持实际表达式,而不支持语句。这是启用LINQ所需的全部功能。 –