2011-07-17 127 views
1

我在尝试将Expression<Func<Entity, bool>>类型的表达式转换为Func<Entity, bool>如何将表达式转换为lambda表达式?

这里的背景是,我试图嘲笑一个存储库,以便它将为给定的键值返回一个模拟实体集合。 (我可以将输入值硬编码到模拟方法,但这对于大量项目来说似乎是错误的方法)。

所以我想嘲笑我的存储库中的第一种方法是这样的:

var collection = new List<Entity> 
{ 
    mockedEntity1, 
    mockedEntity2, 
    mockedEntity3, 
    ... 
}; 

mockRepository 
    .Setup(rep => rep.First(It.IsAny<Expression<Func<Entity, bool>>>())) 
    .Returns<Expression<Func<Entity, bool>>>(e => collection.First(e)); 

这不起作用,因为collection.First需要一个函数功能,而不是一个Expression>。所以我已经到了需要将表达式转换为它包含的Func的地步。

也许有更简单或更好的做到这一点?

回答

4

您需要在表达式上调用Compile

+0

谢谢。这工作:) – Reee

4

它已经一个lambda表达式。但要从lambda获得代表代表,请致电.Compile()

general sense - 要从Expression创建一个lambda,可以使用Expression.Lambda,指示所需的类型并包含参数(声明)实例(来自Expression.Parameter)。但是,这不是必需的。

+0

这是真的。谢谢 :) – Reee