2016-01-27 2 views
1

У меня есть метод в классе DAL:влево-замкнутый интервал дат неожиданных, запрос с использованием NHibernate

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; 
} 

выбрать даты между 20/08/2015 и 22/08/2015 от DataPicker (WPF), это показывает, результат от 20 до 21. Но когда я выбираю даты 20/08/2015 и 23/08/2015, он показывает результаты от 20 до 22, а я знаю, что это результаты из 23!

Что случилось?

ответ

1

Кажется, мы должны преобразовать утреннее время в полночь. Т.е. из 23/08/2015 00:00 - нам нужно 23/08/2015 23:59

Самый простой способ будет просто добавить день

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

За исключением, если «между» на самом деле включено, вы не хотите включать значения точно в полночь в конце + 1 дата ... так что вы можете захотеть 'end.AddDays (1) .AddTicks (-1)'. –

+0

Точно .. Я хотел указать, что есть ** время ** проблема не NHibernate –

Смежные вопросы