2011-06-16 131 views
1

想象一下你有一个数据库结构,你有一个ClassStudent,而Student有一个类,反之亦然,一个类有很多学生。nhibernate查询集合

如何在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

要获取的同时,我会创建一个单独的结合对象,并将其连接到标准(再次,未经测试,但应该让你在正确的轨道上):

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); 
+0

是不是还在转折? – Yhrn 2011-06-16 13:09:56

+0

啊你的权利,让我更新我的答案是和 – Fourth 2011-06-16 13:13:04

+0

是的,所有我似乎无法实现的问题是当你需要一个AND-ed查询,而不是OR(分离)。我知道如何用SQL术语来做,但不以NH术语来说。最好,我想避免HQL,因为我觉得它有点维护噩梦 – 2011-06-16 13:20:06