Escribir una unión anidada con LINQ a entidades

Estoy bastante seguro de que hay un ejemplo de esto en algún lugar aquí, simplemente no puedo encontrarlo, ya que no sé los términos exactos. Así que por favor, sé amable.

El problema debería ser simple:

Tengo una base de datos SQL de Azure, algo mal diseñada (es decir, faltan claves foráneas y demás). Como no puedo rediseñar la base de datos en este momento, tengo que manejar las relaciones manualmente a través de consultas. Como la base de datos también es el cuello de botella de nuestro software, debo intentar completar consultas con el menor número de visitas a la base de datos posible.

Tengo entidades A, B, C y D. Una entidad A tiene varias entidades B (conectadas con una clave externa no registrada), una entidad B tiene varias entidades C y una entidad C tiene varias entidades D.

Tengo el ID de la entidad A, y me gustaría devolver un árbol de todas las entidades conectadas hasta Ds, de la manera más óptima posible.

Comenzando:

from A in dbA.Where(e=>e.Id==IDParameter)
join B in dbB on A.Id equals B.AId into Bs

Ahora tendría que hacer esto con cada B en Bs para C y nuevamente con Cs para D. Si sigo el camino obvio, y me uno a Ds y Cs primero, y luego a Bs y Cs, y finalmente a As y Bs, esto significa unir todas las Ds con Cs, luego todas ... obtienes el punto, hasta que finalmente llego al filtro IDParameter. Simplemente parece ineficaz.

¿Hay una manera adecuada de C # de hacer esto en una sola consulta?

Respuestas a la pregunta(1)

Su respuesta a la pregunta