Как сделать выборку в Datatable с полями DateTime?

У меня есть DataTable с двумя полями «BirthDay» и «HireDay» типа DateTime, и я хочу отфильтровать строки, соответствующие двум конкретным датам.

Следуя инструкциям этой ссылки , я собрал свой запрос следующим образом:

DateTime bday = new DateTime(2016, 8, 9);
DateTime hday = new DateTime(2016, 8, 10);

String query = 
String.Concat("BirthDay=#", Convert.ToString(bday.Date), "# or HireDay=#", Convert.ToString(bday.Date), "#");
DataRow[] encontrados = miDatatable.Select(query);

Значение переменной query равно:

"BirthDay=#09/08/2016 12:00:00 a.m.# or HireDay=#10/08/2016 12:00:00 a.m.#"

И когда я запускаю свое приложение, я получаю следующее исключение:

Необработанное исключение типа 'System.FormatException' в mscorlib.dll

Дополнительная информация: Строка не распознается как допустимый DateTime. В начале индекса 24 есть неизвестное слово.

С другой стороны, если я вручную изменяю значение переменной query на:

"BirthDay=#09/08/2016# or HireDay=#10/08/2016#"

, это не выдает мне исключения, но не возвращает мне строк, хотя у меня есть даты в Поля "BirthDay" и "HireDay" равны 9 августа 2016 года.

Я не нашел, как выполнить преобразование даты, чтобы оно не генерировало исключения и не возвращало мне правильные данные. Мое время и дата устанавливаются по-другому.

Редактировать: Да, я также пытался bday.ToShortDateString(), и он также не возвращает мне строки.

Другое редактирование: Я попробовал решение Леандро Туттини, и оно сработало (оно возвращает правильные строки) ... хотя значение System.Threading.Thread.CurrentThread.CurrentCulture и региональная конфигурация моей операционной системы то же самое: es-PE. Самое смешное, что если я установлю настройку даты в es-PE:

string query =  string.Format("BirthDay=#{0:dd/MM/yyyy}# or HireDay=#{1:dd//MMyyyy}#", bday, hday);

, то строка не вернется. Возможно, Datatables распознает только культуру en-US. Я использую .Net 3.5.

0
задан 15.06.2017, 21:13
1 ответ

Пробует что-то как это

DateTime bday = new DateTime(2016, 8, 9);
DateTime hday = new DateTime(2016, 8, 10);

string query =  string.Format("BirthDay=#{0:MM/dd/yyyy}# or HireDay=#{1:MM/dd/yyyy}#", bday, hday);

DataRow[] encontrados = miDatatable.Select(query);

краев, что у даты есть формат без даты, кроме того suas string. Format () для posicionar каждая стоимость внутри string, что ты используешь фильтра

факт не возвращения стоимости, я думаю, что он приходит из-за формата даты, может быть, формат dd / мм / yyyy это не распознает, поэтому в примере, что я поместил usea того, который использует культуру В-US, где он определяет MM/dd/yyyy

0
ответ дан 24.11.2019, 13:46