我需要编写一个NHibernate查询,该查询将设置一个限制,以一对多的关系访问子节点。
例如,我有一个客户对象,其属性是一个地址列表。我需要找到在特定城市拥有地址的所有客户。
此外,我正在以这样的方式编写此查询,即我还将向客户本身添加其他限制,例如状态,名称等。因此,我不能完全从地址角度编写查询。
关于如何实现这一目标的任何想法?
答案 0 :(得分:1)
您可以在Customer对象的Adresses属性中使用Criteria api和“嵌套”条件:
var result = session
.CreateCriteria(typeof(Customer))
.CreateCriteria("Adresses")
.Add( Restriction.Eq("City", "NY") )
.ToList<Customer>();
如果您需要查询姓名,可以这样:
var customerCriteria = session
.CreateCriteria(typeof(Customer));
customerCriteria.Add( Restrictions.Like("Name", "John", MatchMode.Exact) );
customerCriteria.CreateCriteria("Adresses")
.Add( Restriction.Eq("City", "NY") );
var result = customerCriteria.ToList<Customer>();