2

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

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

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

如果我尝试仅检索 ConcreteChild1,parent.Children.OfType<ConcreteChild1>()则使用结果将是 ConcreteChild1 的列表,如承诺的那样。不幸的是,检查发出的 SQL 显示所有子项实际上都是从数据库中检索到的,因为 SQL 问题是“在(每个子类型)中的鉴别器”而不是“在('ConcreteChild1')中的鉴别器”,正如我所期望的那样。

我该怎么做才能只检索匹配类型的行?

谢谢!

4

1 回答 1

0

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

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

如果您过去使用过类似的导航属性(排序、过滤等),那么所有这些都不会在服务器上运行。我认为由于该限制,您想要使用导航属性访问子集合的情况非常罕见。它几乎从来没有意义。

于 2012-12-27T18:09:53.667 回答