7

我需要一点魔法。我相信我正在尝试做的事情是有道理的,但如果我没有看到计划存在问题,那么原因同样受欢迎。

我有一个表情

Expression<Func<Entity, bool>>

我想转换/转换甚至创建一个全新的表达式:

Expression<Func<Derived, bool>>

这被用作 EF 过滤器查询,作为参数传递给存储库方法。存储库返回一个可枚举的实体,因此我可以很容易地使用协方差,但我想在返回查询之前对其派生状态进行一些后处理。

在我看来,EF 必须自己在内部执行此操作,但我希望能够运行我的查询,以便结果的类型是派生类型而不是实体。

感谢您的帮助。

4

2 回答 2

4

Expression关卡上工作,您可以构建一个具有Derived类型作为参数的新表达式:

var entityExpr = (Expression<Func<Entity, bool>>)(e => e.Str == "");
var derivedExpr = Expression.Lambda<Func<Derived, bool>>(entityExpr.Body, entityExpr.Parameters);
于 2016-02-05T18:04:55.053 回答
3

如果您有表达式Expression<Func<Entity, bool>>,则可以向其中添加一个Cast<Derived>以过滤到该特定类型的所有实体。

于 2013-04-05T08:58:23.127 回答