lave en omvendt join i nhibernate
HejJeg vil gerne finde alle entities i en tabel hvor de opfylder et antale kriterier og hvor deres id'er IKKE optræder i en anden tabel. Dvs en omvendt join.
Nedenstående funktion fungerer men jeg ville helst lave det i et hug mod databasen
Er der nogen der har en smart metode i nhibernate?
Mvh
Henrik
/// <summary>
/// Find alle patienter der er overført til ORTO behandling, siden vi
/// søgte sidst, så vi kan oprette dem i det eksterne system
/// </summary>
private IList<Patient> FindNewOrtoReferredPatients(ISession session, DateTime fromTime, DateTime toTime)
{
IList<Patient> retVal = new List<Patient>();
var patientRepository = new PatientRepository(session);
var patienter = (from x in patientRepository.GetQuery()
where x.VisiterTilOrto == true
&&
(
(x.Log.OprettetTid > fromTime && x.Log.OprettetTid < toTime)
||
(x.Log.RettetTid > fromTime && x.Log.RettetTid < toTime)
)
orderby x.Fornavne
select x).ToList()
;
// Check mod overført listen 'OrVisiteret', og find ud af om der skal oprettes eller opdateres
// Kun hvis de skal oprettes tilføjes de til retVal
var ortoVisiteretRepository = new OrtoVisiteretRepository(session);
var ortoVisiterede = ortoVisiteretRepository.GetAll();
bool allreadyCreated = false;
// FIXME: det her er noget lort. Det har en worst case O-tid på N^2 - det må sgu da kunne laves i DB direkte
foreach (var p in patienter)
{
foreach (var o in ortoVisiterede)
{
if (p.Id == o.Patient.Id)
{
allreadyCreated = true;
break;
}
}
if(!allreadyCreated)
{
retVal.Add(p);
}
allreadyCreated = false;
}
return retVal;
}