2015-12-02 56 views
8

我想要使用预先加载的方式在实体框架核心中获取多个嵌套级别的子表。我不认为延迟加载还未实现。我发现一个answer EF6。在实体框架核心中选择多个子表的嵌套级别

var company = context.Companies 
       .Include(co => co.Employees.Select(emp => emp.Employee_Car)) 
       .Include(co => co.Employees.Select(emp => emp.Employee_Country)) 
       .FirstOrDefault(co => co.companyID == companyID); 

我的问题是Select没有在EF核心认可

错误CS1061“Employees”中不包含“选择”的定义,并没有扩展方法“选择”接受的第一个参数型“Employees”中可以找到(是否缺少using指令或程序集引用?)

我包括名字空间:

using MyProject.Models; 
using Microsoft.Data.Entity; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks; 

EF Core中Select的替代方法是什么?

回答

18

您可以使用关键字ThenInclude代替

例如

var company = context.Companies 
      .Include(co => co.Employees).ThenInclude(emp => emp.Employee_Car) 
      .Include(co => co.Employees).ThenInclude(emp => emp.Employee_Country) 
      .FirstOrDefault(co => co.companyID == companyID); 
+4

我疯了,还是这不再工作在EF核心1.1.0? .ThenInclude将父对象视为ICollection,为我提供集合属性而不是单个元素的属性:/ – JasonX

+6

@JasonX这是IntelliSense中的一个错误,只是将您的查询写为实体,它会正常工作。 –

+0

@DanielZolnai是否有任何机会报告错误 - 或者您是如何找到它的?你有链接到GitHub的问题? – cdavid