2016-05-21 2 views
0

Я использую LINQ для получения списка объектов, находящихся в определенном диапазоне дат. Например, у меня есть текущий день в формате DateTime: 21.05.2016 0:00:00, и мне нужно получать новости, которые были опубликованы после 1 дня назад (5 дней назад, 3 месяца назад, 1 год назад, 5 лет назад) и до этого момента. Я сделал это на следующие пути:Как сделать универсальный запрос для диапазона дат?

List<MyObject> data = 
    DataDownloader.myList.Where(s => s.Date.Year >= fromDate.Year 
            && s.Date.Month >= fromDate.Month 
            && s.Date.Day >= fromDate.Day 
            && s.Date.Year <= toDate.Year 
            && s.Date.Month <= toDate.Month 
            && s.Date.Day <= toDate.Day).ToList(); 

Todate моя текущая дата. Я считаю FromDate следующими:

1 день:

fromDate = toDate; 

5 дней:

fromDate = toDate.AddDays(-5); 

3 месяца:

fromDate = toDate.AddMonths(-3); 

т.д.

Но я получаю только 2 новости за 3 месяца. Это 21.04.2016 0:00:00 и 21.05.2016 0:00:00. Поэтому вы знаете, что они отличаются только количеством месяцев, потому что моя текущая дата - 21.05.2016. Что я делаю неправильно? Я должен получить гораздо больше новостей, я это знаю.

+2

Почему вы каждый компонент-опрос по отдельности, а не просто 's.Date> = fromDate' и т.д.? –

ответ

2

Вы сравниваете каждый элемент даты, который не даст вам правильного ответа.

Вы говорите за последние 3 месяца (с 21/02/2016 по 21/05/2016), что день должен быть между 21 и 21, месяц между 2 и 5 и годом между 2016 и 2016 годы

Вы действительно ищете 21/02/2016, 21/03/2016, 21/04/2016 или 21/05/2016, а не все даты между ними.

Просто сравните дату:

list.Where(x => x.Date >= fromDate && x.Date <= toDate).ToList(); 
Смежные вопросы