我需要一点魔法。我相信我想要做的事情是有道理的,但如果我没有看到计划的问题,原因就会受到欢迎。
我有一个表达
Expression<Func<Entity, bool>>
我想要转换/转换甚至创建一个全新的表达式:
Expression<Func<Derived, bool>>
这被用作EF过滤器查询,作为参数传递给存储库方法。存储库返回一个可枚举的实体,所以我可以很容易地使用协方差,但我想在返回它之前对它的派生状态进行一些后处理。
在我看来,EF必须在内部执行此操作,但我希望能够运行我的查询,以便结果的类型是派生类型而不是实体。
感谢您的帮助。
答案 0 :(得分:3)
如果您有表达式Expression<Func<Entity, bool>>
,则可以向其添加Cast<Derived>
以过滤到该特定类型的所有实体。
答案 1 :(得分:3)
在Expression
级别上,您可以构建一个以Derived
类型为参数的新表达式:
var entityExpr = (Expression<Func<Entity, bool>>)(e => e.Str == "");
var derivedExpr = Expression.Lambda<Func<Derived, bool>>(entityExpr.Body, entityExpr.Parameters);