我有一个非常简单的场景。
代码优先,EF5,默认模型约定
我的Parent类有一个Children集合,它们都来自一个抽象的Child类。假设我有ConcreteChild1和ConcreteChild2。
如果我尝试仅检索ConcreteChild1,则使用parent.Children.OfType<ConcreteChild1>()
结果将是ConcreteChild1的列表,如所承诺的那样。不幸的是,检查发布的SQL会发现所有子项都是从DB中检索出来的,因为SQL会发出“(每个子类型)中的判别符”“不在哪里判别符('ConcreteChild1') “正如我所料。
如何只检索匹配类型的行?
谢谢!
答案 0 :(得分:0)
导航属性不支持查询,因为它们不是IQueryable
(它们当然支持对象的LINQ,但一切都是这样)。
构造一个显式查询并执行它。
如果您曾使用过去的导航属性(排序,过滤等),那么所有这些都不会在服务器上运行。我认为由于这种限制,您希望使用导航属性访问子集合的情况非常很少。它几乎没有意义。