When using EF6, I was using lazy loading so I never had this issue, but with EFCore, I don't know if this is possible with a single query.
I have the following class structure
class A { public B b; }
class B { public ICollection<C> list_c; }
class C { public ICollection<D> list_d; }
abstract class D { public long c_id; }
class Da { public E e; }
class Db { public F f; }
I need a list of all the D
objects, but with access to their e
and f
properties respectively. I have a working query at the moment where I query _db.D
over a list of c_id
's that I fetch using the first half of the query below, but with that approach, I send one query to get all the c_id
's and then one query per type (I have 4 types).
I was wondering if I can make it work with one call that looks something like this:
_db.As.Include(x => x.b)
.ThenInclude(x => x.list_c)
.ThenInclude(x => x.list_d)
// some magic here
.FirstOrDefaultAsync(x=> x.Id = model.Id);
EDIT:
At the moment this is how I make the list:
var a = await _db.As.Include(x => x.b)
.ThenInclude(x => x.list_c)
.FirstOrDefaultAsync(x=> x.Id = model.Id);
var result = await _db.Ds.OfType<Da>()
.Include(x=>x.e)
.Where(x=>a.b.list_c.Any(y=>y.Id == x.c_id))
.Select(x=>(D)x)
.Concat(_db.Ds.OfType<Db>()
.Include(x=>x.f)
.Where(x=>a.b.list_c.Any(y=>y.Id == x.c_id))
.Select(x=>(D)x)).
.ToListAsync();