2008-12-16 80 views
2

我试图使用标准的API来编写以下HQL查询:如何将多写一个标准查询连接涉及

var userList = _session 
       .CreateQuery("select u from User u where u.Role.ID=3 and u.Customer.ID=:cID") 
       .SetInt32("cID", 1) 
       .List<User>(); 

(3个NHibernate的对象:用户(ID,名称,角色,客户),角色(ID,姓名)和客户(ID,姓名)

我尝试以下,但它不起作用,因为NHibernate的试图找到与角色相关联的客户:

var userList = _session 
      .CreateCriteria(typeof(User)) 
      .CreateCriteria("Role") 
      .Add(Restrictions.Eq("ID", 3)) 
      .CreateCriteria("Customer") 
      .Add(Restrictions.Eq("ID", 1)) 
      .List<User>(); 

任何其他方式(这有效!)做到这一点?

回答

4

您可以使用别名

var userList = _session 
     .CreateCriteria(typeof(User), "u") 
     .CreateAlias("u.Role", "r") 
     .Add(Restrictions.Eq("r.ID", 3)) 
     .CreateAlias("u.Customer", "c") 
     .Add(Restrictions.Eq("c.ID", 1)) 
     .List<User>(); 

希望它可以帮助

+0

辉煌!谢谢。 – bounav 2008-12-17 10:40:24