Solución:
Como se discutió aquí, está intentando una consulta que no es compatible con la base de datos. EF Core 2 usó la evaluación del lado del cliente para hacer que su código funcione, pero EF Core 3 se niega, porque la conveniencia del lado del cliente tiene el costo de problemas de rendimiento difíciles de depurar a medida que aumenta el conjunto de datos.
Puedes usar usar DefaultIfEmpty
a la izquierda unirse a los estudios de pacientes y luego agrupar manualmente con ToLookup
.
var query =
from p in db.Patients
join s in db.Studies on p.Id equals s.PatientId into studies
from s in studies.DefaultIfEmpty()
select new { Patient = p, Study = s };
var grouping = query.ToLookup(e => e.Patient); // Grouping done client side
El ejemplo anterior toma las entidades completas de Paciente y Estudio, pero en su lugar puede seleccionar columnas. Si los datos que necesita del paciente son demasiado grandes para repetirlos para cada estudio, en la consulta combinada seleccione solo el ID del paciente y consulte el resto de los datos del paciente en una consulta no combinada separada.