3 votes

Comment créer une projection de sous-requête, lui donner un alias et trier par cet alias dans NHibernate avec l'API Criteria

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

un des posteurs donne cette réponse:

Vous devez créer une Projection (...), lui donner un alias et vous pourrez ensuite trier par l'alias. Pas le temps de donner les détails mais je suis assez sûr que cela fonctionnerait.

Est-ce que quelqu'un pourrait fournir un exemple simple, en utilisant l'API Criteria, d'une requête qui utilise une Projection pour faire une sous-requête, puis utilise cette sous-requête comme Alias, et ensuite trie par cet Alias?

merci!

3voto

BantenCity Points 228

Vous pouvez ajouter plus de DetachedCriteria en fonction de vos besoins.

Voici mon exemple :

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();

J'espère que cela vous aidera.

1voto

BantenCity Points 228

Voici mon exemple simple :

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();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X