次のクラス構造を考える:ここ
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>();
をまた、私はDepartmentIdを既に持っているので、SQLクエリでDepartmentへの参加が必要ではないと思いますStudentテーブルのnキーを押します。正当な理由で余分なテーブルに参加する意味がない。
ちょっと喜び。あなたがスペル/文法/相互作用に余分な努力を払うと助けになるでしょう。質問が読みやすい場合は、助けを受ける可能性が高くなります。また、あなたが最初に自分自身でそれを解決しようとすると、あなたは今までに何を手に入れて助けを求めているのかを見せていただければ大いに感謝しています。 [NHibernateのドキュメント](http://nhforge.org/doc/nh/en/index.html#manipulatingdata-criteria)がこれを手伝ってくれるかもしれません。 – Jeroen
@jeroenまあ私はすでに問題が私は単一のクエリに基づいて数えることができることを見てきたが、カウントが別のサブクエリに基づいているときperticularlyを行う方法..私は上記の私はdidnt成功だから私は助けを求めた...しかし、悪い英語のために申し訳ありません:) – Joy