[英]SQL to NHibernate Criteria Query
我正在將Sharp Architecture用於MVC應用程序,並且試圖為以下SQL生成一個休眠標准查詢:
select top 10 p.* from Tab1 p
join Tab2 v on p.Id = v.Tab1Fk
join Tab3 sbu on v.Id = sbu.Tab2Fk
where sbu.DateTime >= 12/12/2002 00:00:00
group by p.Id, p.Name, p.CoCode, p.CuCode, p.StCode, p.ParentFk, p.LastGenerated
order by COUNT(sbu.Id) desc
目前我有:
var crit = Session.CreateCriteria<Tab1>();
crit.SetMaxResults(numberOfRecords);
crit.CreateCriteria("Tab2", "v", JoinType.InnerJoin)
.CreateCriteria("Tab3", "sbu", JoinType.InnerJoin)
.Add(Restrictions.Ge("sbu.DateTime", since))
.AddOrder(Order.Desc(Projections.Count("sbu.Id")));
return crit.List<Tab1>();
但這會引發錯誤,任何人都可以幫忙嗎?
您是否考慮過使用HQL或NHibernate.Linq ? 我負責多個項目,而且幾乎永遠不會打擾標准api。
const string hql = @"select p.*
from Tab1 p
join p.Tab2 v where p.Tab2.Id = v.Id
join p.Tab3 sbu where v.Id = sbu.Tab2.Id
and sbu.DateTime >= :since
and rownum <= 10
group by p.Id, p.Name, p.CoCode
order by count(sbu.Id) desc";
var list = Session.CreateQuery(hql)
.SetParameter("since", DateTime.Now /* your date */)
.List<Tab1>();
似乎您對SQL很好,所以它們中的任何一個看起來都很自然。
編輯:我必須說我從未按count(item)排序,所以我的語法可能已關閉。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.