How do I convert this into a CriteraQuery:
select n
from TagRegistration t
join t.Tag n
where t.Status & :status > 0
order by count(t.ID) desc
, n.Name asc
How do I convert this into a CriteraQuery:
select n
from TagRegistration t
join t.Tag n
where t.Status & :status > 0
order by count(t.ID) desc
, n.Name asc
Hi!
Did something like that a while ago.
Try something like this.
PropertyProjection projection = Projections.Property("t.ID");
PropertyProjection property = Projections.Property("n.Namn");
ICriteria criteria = session.CreateCriteria<TagRegistration>("t")
.CreateCriteria("Tag","n")
.Add(
Restrictions.Gt(
Projections.SqlProjection("({alias}.ID & 3) as bitWiseResult", new[] { "bitWiseResult" }, new IType[] { NHibernateUtil.Int32 })
, 0)
)
.AddOrder(Order.Desc(Projections.Count(projection)))
.AddOrder(Order.Asc(property))
.SetProjection(Projections.GroupProperty(projection), Projections.GroupProperty(property))
Note this part {alias}.ID & 3) where I inserted the value directly which isn't very good but it works :)
You could do it better if you look at the test project of NHibernate Nhibernate/Criteria/AddNumberProjection.cs
But you need to do a subQuery to return fully initialized Tag I think this query is better to do in Hql.
Regards