Как упорядочить результат по значению подзапроса с критериями - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь отсортировать набор результатов по критерию, основанному на результате подзапроса.

Это подзапрос, который я хочу упорядочить (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.

...