我正在尝试创建一个关联,以根据子对象日期字段加载父对象列表。我只想要日期为> =给定日期的父对象。
问题是,当我使用今天的日期或前一天时,它会返回正确的孩子。但是,如果我使用更晚的日期,比如11-2-2010,它包括日期<&lt; 2010年11月2日。
以下是代码:
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;
}
以及Parent的映射:
<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>
提前致谢!
答案 0 :(得分: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命名约定,而是您所写的内容。