【发布时间】:2018-06-30 21:32:20
【问题描述】:
我已经能够使用ExpressionVisitor 和其他自定义Expressions 修改IQueryable 表达式。
我的问题是使用实体框架(例如 OData)的第三方框架,它们会在内部方法中修改查询,并且在我很难在它们完成后重新修改查询的地方修改查询。
在进程的最后,有一个IQueryable 代表一个表达式树。 Entity Framework 知道如何将该表达式树转换为 T-SQL 并执行它。
我希望修改 Expression\IQueryable 尽可能接近执行。
最好的方法是什么?
【问题讨论】:
-
我能否澄清一下:您究竟想在这里做什么?为什么要对表达式树进行变异,难道不能在in的路上做吗?
-
我有一个 xml 列,我想优化我的查询。所以我有一些代码知道如何调用 [xmlcolumn].value(xpath)。修改 SQL 后,我需要处理投影,所以我动态创建了一个匿名类型并将结果投影到它,然后我使用反射将它重新投影到我的原始实体。相当复杂,但效果很好。当我使用 OData ($select\$expand) 创建自定义类型(不是 IQueryable
)并让我难以修改表达式树时,我的问题就开始了,尤其是当类是内部的时。跨度>
标签: c# entity-framework expression odata iqueryable