.Include()派生类的具体类型?

时间:2013-01-10 23:07:05

标签: c# .net entity-framework

这个Lambda查询有什么问题?我希望能够只包含某种类型的ProjectDocs,可能有很多类型的ProjectDocs

 ICollection<Project> projects = db.Projects
      .Include(i => i.ProjectDoc.OfType<Cover>().Where(s => s.Status == "Active"))
      .Include(i => i.ProjectDoc.OfType<Summary>().Where(s => s.Status == "Active"))
      .Include(i => i.User)
      .Include(i => i.ProjectTag.Select(t => t.Tag)).ToList();

我有一个模型ProjectDoc,其派生类为Cover,Segment和Summary。我是否应该只包含ProjectDoc并在稍后使用条件列?有些类型可能会有大量结果,其他类型只有少数。

我得到错误......

 The Include path expression must refer to a navigation property defined 
 on the type. Use dotted paths for reference navigation properties and the 
 Select operator for collection navigation properties.
 Parameter name: path

“Project”上的Navigation属性是ProjectDoc。派生类没有导航属性。当我尝试时,我有很多额外的钥匙。

1 个答案:

答案 0 :(得分:2)

不支持此方案 - 您只能加载或不加载一组相关实体,但不能应用过滤器表达式来仅加载实体的子集。

API documentation for Include()列出了支持的不同表达式,并声明该方法只是将工作委托给以字符串作为参数的基础Include()方法,例如ObjectQuery.Include()。此方法的文档和链接的页面Shaping Query Results使得或多或少明显不支持此方法。