Ok, tengo entidades de tres niveles con la siguiente jerarquía: Curso -> Módulo -> Capítulo
Aquí estaba la declaración original de EF LINQ:
Course course = db.Courses
.Include(i => i.Modules.Select(s => s.Chapters))
.Single(x => x.Id == id);
Ahora, quiero incluir otra entidad llamada Lab que está asociada con un curso.
¿Cómo incluyo la entidad Lab?
Intenté lo siguiente pero no funcionó:
Course course = db.Courses
.Include(i => i.Modules.Select(s => s.Chapters) && i.Lab)
.Single(x => x.Id == id);
¿Alguna idea sobre la inclusión de la 2da entidad?
Cualquier consejo o información sería muy apreciada. ¡Gracias!
.Include
debería funcionar a menos que quiera decir que la inclusión adicional es un nieto de Course. Vea esto o una mejor opción es estaRespuestas:
¿Has probado simplemente agregando otro
Include
?Su solución falla porque
Include
no toma un operador booleanoActualización Para obtener más información, descargue LinqPad y consulte los ejemplos. Creo que es la forma más rápida de familiarizarse con Linq y Lambda.
Para empezar, la diferencia entre
Select
yInclude
es que con un Select usted decide lo que quiere devolver (también conocido como proyección). La función Incluir es Eager Loading , que le dice a Entity Framework que desea que incluya datos de otras tablas.La sintaxis de Incluir también puede estar en cadena. Me gusta esto:
Pero las muestras en LinqPad explican esto mejor.
fuente
.Include("Module.Chapter")
. ¿Alguna idea de por qué sería eso?System.Data.Enity
de nombres para acceder al método de extensión. más información aquíusing System.Data.Entity;
lo hizo. ¡Gracias!En Entity Framework Core (
EF.core
) puede usar.ThenInclude
para incluir los siguientes niveles.Más información: https://docs.microsoft.com/en-us/ef/core/querying/related-data
Nota: Digamos que usted necesita múltiples
ThenInclude()
enblog.Posts
, sólo tiene que repetir elInclude(blog => blog.Posts)
y hacer otraThenInclude(post => post.Other)
.fuente
ThenInclude
EF core. Tal vez haga una pregunta con un buen ejemplo, para que podamos responderla.Include
forma parte de una interfaz fluida, por lo que puede escribir variasInclude
declaraciones una tras otrafuente
También puedes probar
fuente
Uno puede escribir un método de extensión como este:
Y úsalo así incluso en una implementación genérica:
fuente
Include