尽管OfType,TPH查询返回所有对象

时间:2012-12-27 16:05:39

标签: entity-framework entity-framework-5

我有一个非常简单的场景。

代码优先,EF5,默认模型约定

我的Parent类有一个Children集合,它们都来自一个抽象的Child类。假设我有ConcreteChild1和ConcreteChild2。

如果我尝试仅检索ConcreteChild1,则使用parent.Children.OfType<ConcreteChild1>()结果将是ConcreteChild1的列表,如所承诺的那样。不幸的是,检查发布的SQL会发现所有子项都是从DB中检索出来的,因为SQL会发出“(每个子类型)中的判别符”“不在哪里判别符('ConcreteChild1') “正如我所料。

如何只检索匹配类型的行?

谢谢!

1 个答案:

答案 0 :(得分:0)

导航属性不支持查询,因为它们不是IQueryable(它们当然支持对象的LINQ,但一切都是这样)。

构造一个显式查询并执行它。

如果您曾使用过去的导航属性(排序,过滤等),那么所有这些都不会在服务器上运行。我认为由于这种限制,您希望使用导航属性访问子集合的情况非常很少。它几乎没有意义。