考慮下面的類結構:
public class Result{
public virtual Student Student {get; set;}
}
public class Student{
public virtual Department Department {get; set;}
public virtual int Id { get; set;}
}
public virtual Department {
public virtual int Id {get; set;}
public virtual IList<Student> Students {get; set;}
}
下面是使用您的查詢的標準API:
var studentidquery = DetachedCriteria.For<Student>()
.Add(Restrictions.Eq("Department.Id"),2)
.SetProjection(Projections.Property("Id"));
var count = session.CreateCriteria<Result>()
.Add(Subqueries.PropertyIn("StudentId", studentidquery))
.UniqueResult<int>();
使用QueryOver API就應該是這樣的:
var studentidquery = QueryOver.Of<Student>()
.Where(x=>x.Department.Id==2)
.Select(x=>x.Id);
var count = session.QueryOver<Result>()
.WithSubquery.WhereProperty(x => x.Id).In(studentidquery)
.Select(Projections.Count<Result>(r=>r.Id))
.UniqueResult<int>();
另外我不認爲你需要在你的SQL查詢中加入Department,因爲你已經有了DepartmentId作爲外國人在Student表中輸入n個鍵。沒有理由加入額外的桌子沒有意義。
嘿,快樂。如果你在拼寫/語法/函數上做了額外的工作,這將會有所幫助。如果一個問題容易閱讀,你更有可能獲得幫助。此外,如果您先嚐試自己解決問題,並通過詢問幫助向我們展示您到目前爲止的情況,通常會感激不盡。 [NHibernate文檔](http://nhforge.org/doc/nh/en/index.html#manipulatingdata-criteria)可以幫助你解決這個問題。 – Jeroen
@jeroen以及我已經看到,問題是我可以基於單個查詢,但如何做到這一點特別是當計數是基於另一個子查詢,我上面提到..我不知道如果即時進行正確的原因,我沒有成功所以我尋求幫助...對不起英語,但對不起:) – Joy