NHibernate过滤盛大儿童系列

时间:2016-04-06 11:48:09

标签: c# nhibernate collections filter

我有以下对象

a = []
a.append(a)
print(a)

我需要通过Date2限制GrandChild列表。我尝试了以下

public class Parent {
    int Id;
    Object Obj1;
    Object Obj2;
    DateTime Date1;
    IList<Child> Children;
}

public class Child {
    int Id;
    Parent Parent;
    IList<GrandChild> GrandChildren;
}

public class GrandChild {
    int Id;
    Child Child;
    DateTime Date2;
}

但是这不会过滤盛大的儿童集合。

非常感谢您的意见。

谢谢。

3 个答案:

答案 0 :(得分:1)

如果您想要过滤集合,则应直接在GrandChildren查询并返回这些对象的列表。然后,您可以加入父母,并在获取所有Grandchildren

后选择linq中的列表

如果这对您不起作用,您也可以查看此文章: NHibernate - Retrieve parent / children with criteria applied only to children

答案 1 :(得分:0)

我不确定你的问题是什么。您可能希望过滤列表。不是这种情况。对象始终返回完整。你拥有它的查询是过滤父类的至少一个的大孩子的属性,同时总是返回完整的对象。

(如果这会有所不同,将宏子元素添加到已过滤列表中会很奇怪.ORM返回的对象是以OOP方式工作的,而不仅仅是SQL返回的只读数据。)

您可以使用grans children启动查询,获取(平面)已过滤的大孩子列表。从每个孩子,您可以通过其属性导航到其父母:

var query = QueryOver.Of<GrandChild>()
    .Where(p => p.Obj1.Id == param1 && p.Obj2.Id == param2 && p.Date1 == paramDate);

现在导航回父母时,你会发现它们再次完成:

var countAllSiblings = queriedGrandChild.Child.GrandChildren.Count()

答案 2 :(得分:0)

进行更多研究我所要做的就是将大孩子从内到左改变并获得预期的效果。

var query = QueryOver.Of(() => parentAlias)
    .Inner.JoinAlias(() => parentAlias.Children, () => childAlias)
    .Left.JoinAlias(() => childAlias.GrandChildren, () => grandChildAlias, dateCriterion)
    .Where(p => p.Obj1.Id == param1 && p.Obj2.Id == param2 && p.Date1 == paramDate);

这将Child对象列表中的GrandChild列表项限制为日期之间的项目。

希望这有帮助。