left-closed 日期间隔意外,使用 NHIBERNATE 查询
left-closed Interval of dates unexpected, query using NHIBERNATE
我在 DAL 中有一个方法 class:
public IList<HouseHold> FindByDate(DateTime start, DateTime end)
{
using (ISession session = NHibernateHelper.AbreSession())
{
return session.CreateCriteria<HouseHold>()
.Add(Expression.Between("RegistrationDate", start, end))
.List<HouseHold>();
}
}
有了这个,我希望从一个封闭间隔之间的日期获取数据。但是当我使用这个方法时,它的结果是一个左闭区间,就像这样:
private IList<HouseHold> LoadData()
{
hh = dao.FindByDate(start.SelectedDate.Value, end.SelectedDate.Value);
return hh;
}
我从 DataPicker
(WPF) 中选择 20/08/2015 和 22/08/2015 之间的日期,它显示从 20 到 21 的结果。但是当我选择日期 20/08/2015 和 23 /08/2015 它显示 20 到 22 的结果,而我知道那是 23 的结果!
怎么了?
看来我们必须将上午时间转换为午夜时间。即来自
23/08/2015 00:00
- 我们需要 23/08/2015 23:59
最简单的方法就是添加一天
.Add(Expression.Between("RegistrationDate", start, end.AddDay(1)))
我在 DAL 中有一个方法 class:
public IList<HouseHold> FindByDate(DateTime start, DateTime end)
{
using (ISession session = NHibernateHelper.AbreSession())
{
return session.CreateCriteria<HouseHold>()
.Add(Expression.Between("RegistrationDate", start, end))
.List<HouseHold>();
}
}
有了这个,我希望从一个封闭间隔之间的日期获取数据。但是当我使用这个方法时,它的结果是一个左闭区间,就像这样:
private IList<HouseHold> LoadData()
{
hh = dao.FindByDate(start.SelectedDate.Value, end.SelectedDate.Value);
return hh;
}
我从 DataPicker
(WPF) 中选择 20/08/2015 和 22/08/2015 之间的日期,它显示从 20 到 21 的结果。但是当我选择日期 20/08/2015 和 23 /08/2015 它显示 20 到 22 的结果,而我知道那是 23 的结果!
怎么了?
看来我们必须将上午时间转换为午夜时间。即来自
23/08/2015 00:00
- 我们需要 23/08/2015 23:59
最简单的方法就是添加一天
.Add(Expression.Between("RegistrationDate", start, end.AddDay(1)))