Ik heb een vraag die naar banen zoekt waarbij alle toegewezen uren niet zijn gebruikt door de toegewezen technicus.
In SQL kan ik een hebbende clausule gebruiken om tegen de som te vragen.
SELECT J.Jobid, J.HoursAssigned, SUM(JT.HoursUsed)
FROM Job J
JOIN JobTechnician JT ON JT.JobId = J.JobId
GROUP BY J.Jobid, J.HoursAssigned
HAVING J.HoursAssigned <> SUM(JT.HoursUsed)
Dit resulteert in een dataset van het volgende
JOBID | HOURSASSIGNED | HOURSUSED
-----------------------------------
660015 | 10 | 8
660016 | 20 | 18
660017 | 30 | 28
660018 | 40 | 38
Ik kan de query opnieuw maken als een projectie in Nhibernate, maar hoe plaats ik de beperking die momenteel bestaat in de SQL having-clausule?
ICriteria criteria = base.Session.CreateCriteria(typeof(Job));
criteria.CreateAlias("Job.JobTechnicianList", "JobTechnician", JoinType.InnerJoin);
criteria.SetProjection(
Projections.ProjectionList()
.Add(Projections.Property("Job.JobId", "JobId")
.Add(Projections.Property("Job.HoursAssigned", "HoursAssigned")
.Add(Projections.Sum("JobTechnician.HoursUsed"), "HoursUsed")
.Add(Projections.GroupProperty("Job.JobId"))
.Add(Projections.GroupProperty("Job.HoursAssigned"))
);