Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NHibernate CreateCriteria无法正确处理关联和日期_Nhibernate_Associations_Createcriteria - Fatal编程技术网

NHibernate CreateCriteria无法正确处理关联和日期

NHibernate CreateCriteria无法正确处理关联和日期,nhibernate,associations,createcriteria,Nhibernate,Associations,Createcriteria,我正在尝试创建一个关联,以基于子对象日期字段加载父对象列表。我只想要日期>=给定日期的父对象 问题是,当我使用今天的日期或前一天的日期时,它会返回正确的子项。但如果我使用的日期要追溯到更远的时间,比如2010年11月2日,则包括日期小于2010年11月2日的儿童 代码如下: public IList<Parent> GetByDate(string parentId, DateTime date) { IList<Parent> list = null; usin

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

问题是,当我使用今天的日期或前一天的日期时,它会返回正确的子项。但如果我使用的日期要追溯到更远的时间,比如2010年11月2日,则包括日期小于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;
} 
public IList GetByDate(字符串parentId,日期时间日期){
IList list=null;
使用(ISession session=SessionFactory.OpenSession()){
列表=session.CreateCriteria(typeof(父级))
.Add(Expression.Eq(“parent_id”,parentId))
.CreateCriteria(“子项”)
.Add(Expression.Gt(“end_date”,date)).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>



提前谢谢

向条件添加限制将不会影响加载的子项,只会影响加载的父项(在您的情况下这没有意义,因为您已经有了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>();
var parent=session.Get(parentId);
var children=session.CreateFilter(parent.children,“where end_date>:date”)
.SetParameter(“日期”,日期)
.List();

这假设您正在筛选的属性名为end_date,它不遵循.Net命名约定,而是您编写的属性。

向条件添加限制将不影响加载的子项,只影响加载的父项(这在您的情况下没有意义,因为您已经有了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>();
var parent=session.Get(parentId);
var children=session.CreateFilter(parent.children,“where end_date>:date”)
.SetParameter(“日期”,日期)
.List();

这假设您正在筛选的属性名为end_date,它不遵循.Net命名约定,而是您编写的属性。

您是否有可能使用我的代码映射提供一个示例?我想我理解您的意思,但一个示例是kewl。您是否有可能使用我的代码映射提供一个示例?我想我理解您的意思在你说,但一个例子是kewl。