nhibernate查询集合

时间:2011-06-16 12:49:28

标签: nhibernate collections

想象一个数据库结构,你有一个ClassStudent,而学生有一个班级,反之亦然,一个班有很多学生。

对于以下内容,如何在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)时问题就开始了。

有什么想法吗?

1 个答案:

答案 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);