使用Entity Framework加入视图时使用.Include()

我使用索引视图,这是一个没有任何关系的实体(与我的表实体的关系将是更好的,但这似乎几乎不可能实现)。 这个视图由4个FK组成,它们共同形成PK:

PortalID CategoryID BranchID CompanyID 

现在我加入这个视图来选择一组像这样的公司:

 var companies = (from c in database.Companies.FindAll().Include("City") join l in database.CompanyList.FindAll() on c.ID equals l.CompanyID where l.PortalID == 9 && l.BranchID == 1597 select c).Take(10); 

实体公司与表格(城市ID,城市)有关联,我希望包含并完美地运作。 但是,当我加入视图时,.Include()被完全忽略,从而导致查询没有连接到cities表。

正如您可能已经使用存储库模式得出结论而FindAll()返回IQueryable并且我已经手动将Include扩展添加到IQueryable,如下所示:

 public static IQueryable Include(this IQueryable sequence, string path) { var objectQuery = sequence as ObjectQuery; if (objectQuery != null) return objectQuery.Include(path); return sequence; } 

我已经彻底测试了这个扩展程

所以现在对于我的问题,为什么它忽略了最终表达式树中的Include操作,我怎么能阻止它这样做呢?

更新:
我从以下链接获得了我的解决方案: http : //blogs.msdn.com/b/alexj/archive/2009/06/02/tip-22-how-to-make-include-really-include.aspx

哪个说我需要像这样重写我的查询:

 var companies = (from c in database.Companies.GetAll() join l in database.CompanyList.GetAll() on c.ID equals l.CompanyID where l.PortalID == 9 && l.BranchID == 1597 select c).Include("City").Take(10); 

您的问题的答案为什么它忽略了最终表达式中的Include操作? 因为当您使用CompanyList加入公司表时,此连接操作的结果实体类型是新类型包含两种实体类型仅基本类型属性但是如果要包括城市,则必须将结果类型转换为公司类型,然后调用包含此城市铸造类型。