1

我正在尝试创建一个关联来加载基于子对象日期字段的父对象列表。我只想要日期>=给定日期的父对象。

问题是,当我使用今天的日期或前一天时,它会返回正确的孩子。但是,如果我使用更早的日期,例如 11-2-2010,它包括日期 < 11-2-2010 的孩子。

这是代码:

public IList<Parent> GetByDate(string parentId, DateTime date) {
  IList<Parent> list = null;
  using (ISession session = SessionFactory.OpenSession()) {
    list = session.CreateCriteria(typeof(Parent))
                      .Add(Expression.Eq("parent_id", parentId))
                      .CreateCriteria("children")
                        .Add(Expression.Gt("end_date", date)).List<Parent>();
  }
  return list;
} 

以及父级的映射:

<id name="id">
  <generator class="native"/>
</id>

<property name="parent_id" />

<bag name="children" lazy="false">
  <key column="parent_id" />
  <one-to-many class="Child" />
</bag>

提前致谢!

4

1 回答 1

1

向标准添加限制不会影响加载哪些子项,只会影响加载哪些父项(在您的情况下这没有意义,因为您已经有一个 parentId;使用ISession.Get

如果您需要过滤子集合,请使用ISession.CreateFilter.

例子:

var parent = session.Get<Parent>(parentId);
var children = session.CreateFilter(parent.children, "where end_date > :date")
                      .SetParameter("date", date)
                      .List<Children>();

这假定您要过滤的属性称为 end_date,它不遵循 .Net 命名约定,而是您编写的。

于 2010-12-05T01:14:03.733 回答