2013-04-05 97 views
7

我需要一點魔力。我相信我想要做的事情是有道理的,但如果我沒有看到這個計劃有什麼問題,那麼爲什麼會這麼歡迎。將拉姆達表達式轉換爲派生類型

我有一個表達

Expression<Func<Entity, bool>>

,我想投/轉換,甚至創造出一種全新的表達:

Expression<Func<Derived, bool>>

這被用作EF篩選查詢,作爲參數傳遞給存儲庫方法。存儲庫返回Entity的枚舉,所以我可以很容易地使用協變,但是我想在返回它之前對它的派生狀態進行一些後置處理。

在我看來,EF必須在內部做到這一點,但我希望能夠運行我的查詢,以便結果的類型是派生類型而不是實體。

感謝您的幫助。

+2

如果添加了一個演員怎麼查詢? – 2013-04-05 08:46:29

+0

我不確定這是否是重複的,但它肯定與我的[此問題](http://stackoverflow.com/q/2797261/50079)非常相似。 – Jon 2013-04-05 08:53:42

+0

阿格該死。我很厚。感謝您指出明顯的出血。 – MJM 2013-04-05 08:55:13

回答

3

如果你有你的表達Expression<Func<Entity, bool>>你可以添加一個Cast<Derived>它過濾到所有具有該特定類型的實體。

3

工作的Expression水平,你可以建立具有Derived類型作爲參數的新表情:

var entityExpr = (Expression<Func<Entity, bool>>)(e => e.Str == ""); 
var derivedExpr = Expression.Lambda<Func<Derived, bool>>(entityExpr.Body, entityExpr.Parameters);