67

I want to get multiple nested levels of child tables in Entity Framework Core using eager loading. I don't think lazy loading is implemented yet.

I found an answer for 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);

My problem is that Select is not recognized in EF Core

Error CS1061 'Employees' does not contain a definition for 'Select' and no extension method 'Select' accepting a first argument of type 'Employees' could be found (are you missing a using directive or an assembly reference?)

My included namespaces:

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

What is the alternative for Select in EF Core.

2 Answers 2

133

You can use the keyword ThenInclude instead

e.g.

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);
Sign up to request clarification or add additional context in comments.

4 Comments

Am I insane, or does this no longer work in EF Core 1.1.0? .ThenInclude treats the parent as an ICollection, offering me the collection properties instead of a single element's properties :/
@JasonX It is a bug in IntelliSense, just write you query as it would be an entity and it will work fine.
@DanielZolnai did you report the bug by any chance - or how did you find it? Do you have a link to the GitHub issue?
@cdavid It's listed here in the docs, and here on github. Unrelated: Painful that I have to do the .Include twice for grandchildren from the same child (in your (firste's) case, Employees). But excellent example; thanks.
5

Also, the .ThenInclude intellisense for only works up to the 3rd level, for example:

_Context.A.Include(a => a.B).ThenInclude(B => B.C).ThenInclude(C => C.D)

The last part of that statement:

 .ThenInclude(C => C.D)

won't show "D", so you have to type D in yourself, then wait for a short period of time for the compilation error to disappear!

2 Comments

Using dotnet 5 and EF Core, intellisense is working at 3rd and 4th level (and possibly beyond).
Nice. About time!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.