NHibernate - Получение родительских / дочерних элементов с критериями, применяемыми только к дочерним элементам

У меня есть родительская сущность со списком дочерних сущностей. При использовании NHibernate для получения заданного родителя с потомками из SQL, он отлично работает, если потомков нет ИЛИ если есть потомки с датами, соответствующими условию where.

Если есть потомки, которые не соответствуют предложению where, то родительский элемент равен нулю. Я хочу, чтобы родительский элемент был инициализирован пустым списком дочерних элементов.

Есть ли какие-либо мысли о том, как я могу изменить приведенный ниже код, чтобы это произошло?

Объекты:

public class Parent
{
    public int ParentId;
    public IList<Child> Children { get; set; }

    public Parent()
    {
        Children = new List<Child>();
    }
}

public class Child
{
    public int ChildId;
    public DateTime ChildDate;
    public Parent Parent { get; set; }
}

Репозиторий:

IList<Parent> foundParents = new List<Parent>();

var criteria1 = DetachedCriteria.For<Parent>()
    .Add(Restrictions.Eq("ParentId", parentId))
    .CreateCriteria("Children", JoinType.LeftOuterJoin)
        .Add(Restrictions.Or(
            Restrictions.IsNull("ChildDate"), // no children at all
            Restrictions.And(
                Restrictions.Ge("ChildDate", startDate),
                Restrictions.Le("ChildDate", endDate)
            )
        ));

foundParents = Session
    .CreateMultiCriteria()
    .Add<Parent>(criteria1)
    .SetResultTransformer(new DistinctRootEntityResultTransformer())
    .List()[0] as List<Parent>;

Если бы я писал SQL для этого я бы поместил сравнение дат с левым соединением, а не в предложение where. Я не могу понять, как это сделать с помощью NHibernate.

5
задан Mayo 27 October 2010 в 18:54
поделиться