2013-12-02 3 views
0

В пользовательском интерфейсе у меня есть два поля date picker, которые пользователь может выбрать дата начала и окончания его поиска. (Нет ввода значения времени, только дата). Например, он может ввести ту же дату для начала и конца своих критериев, если он хочет видеть только записи за эту конкретную дату.Поиск записей в один конкретный день

Теперь в SQL Server эти столбцы хранятся в виде DateTime fileds со значениями как

'2013-04-04 10:48:02.830' 

так, потому что он сохраняет часть времени в SQL Server тоже, то мои поиски не возвращают результат, когда начальная и конечная дата то же самое в части C#. Как я могу исправить это на стороне C#? (Я предполагаю, что в части времени, которую мы сохраняем в SQL Server, в какой-то другой части приложения используется прецедент, поэтому не нужно связываться со вспомогательной частью).

Итак: SQL Server имеет значения, как '2013-04-04 10:48:02.830' C# проходит значения, как {11/26/2011 12:00:00 AM} И когда начало и конец совпадают, мы не получаем никаких результатов.

+1

Почему бы просто не сказать 'WHERE DbValueField> = 'StartDate 00:00:00' AND <= 'EndDate 23: 59: 59''? Псевдокод прежде, чем вы спросите! Это будет работать, если дата начала и окончания будет в тот же день. – Belogix

ответ

2

Если у вас есть код на задней части, которые идут к SQL Server для вас, вместо того, чтобы иметь интерфейс, который связан данные:

Вы просто берете два значения, полученные из пользовательского интерфейса и изменять их по мере необходимости :

DateTime from = originalFromDate.Date; 
DateTime to = originalToDate.Date.AddDays(1).AddSeconds(-1); 

и теперь, если вы ищете что-нибудь, что находится между от и до, вы найдете свои записи:

(в случае LINQ :)

var query = queryUntilNow.Where(x => x.Date >= from && x.Date <= to); 
+0

oh one ore question too: в моем случае мне пришлось добавить часть AddDay (1) в раздел «StartDate», чтобы заставить ее работать. Если я добавлю ее в раздел «EndDate», запрос все равно не вернет результаты. Любая идея по этой странной вещи? Спасибо –

+1

Вы создаете временной диапазон, то есть полночь на первое свидание и почти полночь в день ПОСЛЕ второй даты (на 1 секунду раньше) - скажем, 01/01/2013 в 00:00:00 до 02/01/2013 23:59:59. Таким образом, любая метка времени в этом диапазоне эффективно находится в диапазоне от/до диапазона. –

+1

@DevWannaBe: Добавление дня к дате начала не может быть правильным, не так ли? Если вы вернете данные, они не будут содержать записи с самой даты начала ... –

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