Как создать проекцию подзапроса, назначить ему псевдоним и отсортировать по псевдониму в NHibernate с помощью API Criteria - PullRequest
3 голосов
/ 07 января 2011

forum.hibernate.org / viewtopic.php? P = 2378849

один из авторов дает такой ответ:

Вам необходимо создатьПроекция (...), дать ему псевдоним, и вы можете сортировать по псевдониму.Нет времени публиковать подробности, но я почти уверен, что это сработает.

Может ли кто-нибудь предоставить простой пример, используя Criteria API, запроса, использующего Projection для выполнения подзапрос , а затем использует этот подзапрос в качестве псевдонима, а затем заказывает этот псевдоним?

ура!

Ответы [ 2 ]

3 голосов
/ 07 января 2011

вы можете добавить больше DetachedCriteria в зависимости от ваших потребностей.

Вот мой образец:

DetachedCriteria sum = DetachedCriteria.For(typeof(MasterAsset), "asset2")
                    .SetProjection(Projections.Sum("PhysicCondition"));

DetachedCriteria count = DetachedCriteria.For(typeof(MasterAsset), "asset3")
                    .SetProjection(Projections.Count("PhysicCondition"));

Session.CreateCriteria(typeof(MasterAsset), "asset1")
                    .SetProjection(Projections.ProjectionList()
                    .Add(Projections.Property("IDMasterAsset"), "IDAsset"))
                    .Add(Subqueries.PropertyLt("PhysicCondition", sum))
                    .Add(Subqueries.PropertyLe("PhysicCondition", count))
                    .AddOrder(Order.Asc("IDAsset"))
                    .List();

Надеюсь, эта помощь.

1 голос
/ 07 января 2011

Вот мой простой пример:

DetachedCriteria sum = DetachedCriteria.For(typeof(MasterAsset), "asset2")
                  .SetProjection(Projections.Sum("PhysicCondition"));
Session.CreateCriteria(typeof(MasterAsset), "asset1")
          .SetProjection(Projections.ProjectionList().Add(Projections.Property("IDMasterAsset"), "IDAsset"))
          .Add(Subqueries.PropertyLt("PhysicCondition", sum))
          .AddOrder(Order.Asc("IDAsset"))
          .List();     
...