子集合的HQL限制

时间:2010-10-05 15:27:37

标签: c# nhibernate hql

我有一个有集合的课程

public class Parent
{
    ...
    ISet<Child> Children;
    ...
}

给定一个子名称列表,我想返回其Children属性包含此列表中所有项目的父母。

我设法编写了一个HQL查询,但它适用于单个名称,而不是整个列表:

SELECT p FROM Parent AS p JOIN p.Children AS c WHERE c.Name = 'MyName'

1 个答案:

答案 0 :(得分:0)

感谢Mauricio,我设法通过以下条件查询解决了这个问题

var criteria = session.CreateCriteria<Parent>("p")
                        .Add(Restrictions.IsNotEmpty("p.Children"));

foreach (var name in namesToMatch)
{
     criteria.Add(Subqueries.Exists(DetachedCriteria.For<Parent>("p2")
                            .SetProjection(Projections.Id())
                            .CreateAlias("p2.Children", "c")
                            .Add(Restrictions.Eq("c.Name", name))
                            .Add(Restrictions.EqProperty("p2.Id", "p.Id"))));
}