2011-07-17 168 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