C# 意外的左关闭日期间隔,使用NHIBERNATE查询

C# 意外的左关闭日期间隔,使用NHIBERNATE查询,c#,wpf,nhibernate,nhibernate-criteria,C#,Wpf,Nhibernate,Nhibernate Criteria,我在DAL类中有一个方法: public IList<HouseHold> FindByDate(DateTime start, DateTime end) { using (ISession session = NHibernateHelper.AbreSession()) { return session.CreateCriteria<HouseHold>() .Add(Expression.Between("R

我在DAL类中有一个方法:

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>();
    }
}
public IList FindByDate(日期时间开始,日期时间结束)
{
使用(ISession session=NHibernateHelper.AbreSession())
{
返回会话。CreateCriteria()
.Add(表达式.Between(“注册日期”,开始,结束))
.List();
}
}
有了这个,我希望从一个封闭的时间间隔之间的日期获取数据。但当我使用这个方法时,结果是一个左闭区间,如下所示:

private IList<HouseHold> LoadData()
{
    hh = dao.FindByDate(start.SelectedDate.Value, end.SelectedDate.Value);
    return hh;
}
private IList LoadData()
{
hh=dao.FindByDate(start.SelectedDate.Value,end.SelectedDate.Value);
返回hh;
}
我从数据采集器(WPF)中选择2015年8月20日至2015年8月22日之间的日期,它显示从20日至21日的结果。但当我选择日期20/08/2015和23/08/2015时,它显示了20到22之间的结果,而我知道这是23之间的结果


怎么了

看来我们得把早上的时间改成午夜的时间。即来自
2015年8月23日00:00
-我们需要
2015年8月23日23:59

最简单的方法就是增加一天

.Add(Expression.Between("RegistrationDate", start, end.AddDay(1)))

除非“between”实际上是包含的,否则您不希望在结束+1日期的午夜正好包含值。。。因此,您可能需要
end.AddDays(1).AddTicks(-1)
。。我想指出的是,有一个时间问题,而不是NHibernate