想象一个数据库结构,你有一个Class
和Student
,而学生有一个班级,反之亦然,一个班有很多学生。
对于以下内容,如何在Nhibernate中创建查询(最好是QueryOver或Criteria API)。
Select ANY class which contains BOTH StudentA and StudentB.
如果是分离(OR),我可以通过指定
来实现List<Student> studentRestrictionList = new List<Student>();
studentRestrictionList.Add(studentA);
studentRestrictionList.Add(studentB);
Student studentAlias = null;
var q = session.QueryOver<Class>();
q.Left.JoinAlias(item => item.Students, () => studentsAlias);
q.WhereRestrictionOn(() => studentsAlias.ID)IsInG(studentRestrictionList);
当我需要进行连接(AND)时问题就开始了。
有什么想法吗?
答案 0 :(得分:0)
为了得到结合,我会创建一个单独的连接对象并将其附加到标准(再次,未经测试,但应该让你在正确的轨道上):
var q = DetachedCriteria.For<Class>()
.CreateCriteria("this.Students", "student");
var con = new Conjunction();
foreach(var s in studentList)
{
con.Add(Restrictions.Eq("student.Id", s.Id));
}
q.Add(con);