Я пытаюсь отсортировать набор результатов по критерию, основанному на результате подзапроса.
Это подзапрос, который я хочу упорядочить (OuterKG - это KG в основном запросе):
SELECT top 1 L.name
FROM KG
LEFT OUTER JOIN LKG ON KG.id = LKG.KG_id
LEFT OUTER JOIN L ON LKG.L_id = L.id
WHERE KG.id = OuterKG.id
AND LKG.createdDate <= GETDATE()
AND (LKG.inactiveDate IS NOT NULL
OR GETDATE() <= LKG.inactiveDate )
AND GETDATE() <= KG.endingDate
ORDER BY L.name
И вот код, который я получил до сих пор:
var detachedCriteria = DetachedCriteria.For(typeof(KG))
.Add((KG kg) => kg.ID == outerKg.ID);
detachedCriteria.CreateCriteria((KG kg) => kg.LKGs)
.Add((LKG lkg) => lkg.createdDate <= DateTime.Now.Date)
.Add(Restrictions.Or(
Restrictions.IsNotNull("InactiveDate"),
Restrictions.Le("InactiveDate", DateTime.Now.Date)))
.Add((LKG lkg) => lkg.KG.EndingDate.Date >= DateTime.Now.Date);
// I'm not sure about this part, I need to join LKG with L and
// project only the first l.name property
detachedCriteria.CreateCriteria("L", "l")
.SetProjection(Projections.Property("l.name"))
.AddOrder((L l) => l.Name, Order.Asc);
mainCriteria.AddOrder(Order.Asc(Projections.SubQuery(detachedCriteria)));
Я новичок в критериях и Hibernate в целом, поэтому большая часть кода может быть неправильной. Вы можете предположить, что сопоставления верны. Я использую Nhibernate версии 3.0.0.4000.