#c# #.net #ado.net
#c# #.net #ado.net
Вопрос:
У меня есть некоторые данные, извлеченные из базы данных, которые я храню в таблице данных. Что я хочу сделать, так это извлечь только записи, которые соответствуют дате, переданной в качестве параметра, только если она больше DateTime.MinValue(). Это должно быть легко.
Ниже приведен фрагмент кода того, как я создаю строку запроса. Я знаю, что если у меня нет фильтра по дате, я получаю записи ‘x’, но я всегда получаю 0 с фильтром по дате.
string query = string.Format("Field_Name IN( 'GENDER','DOB','MARITAL_STATUS','SS') AND DIFF_TYPE = 'PER' AND Person_ID = '{0}'", Person_ID);
if (ChangeDetected > DateTime.MinValue)
{
query = string.Format(" AND ChangeToDT = #{0}#", ChangeDetected);
}
ChangeDataSet.DifferencesRow[] perChanges = this.m_ChangeDS.Differences.Select(query, "ChangeFromDT ASC, Field_Name DESC") as ChangeDataSet.DifferencesRow[];
Я пробовал всевозможные варианты формата вывода для DateTime в фильтре, но все они дают одинаковый результат.
Я также недостаточно знаю LINQ, чтобы выполнить условный фильтр таким образом. {:o(
Ответ №1:
Попробуйте указать формат напрямую:
query = string.Format(" AND ChangeToDT = #{0}#", ChangeDetected.ToString("MM/dd/yyyy"));
Кстати: это не имеет никакого отношения к LINQ.
Комментарии:
1. Это сработало!!! По какой-то причине сравнение DateTime требует, чтобы оно было приведено к строке в формате US. Спасибо.
2. Кстати, я знаю, что это не LINQ, но коллега сказал мне, что это было бы легко сделать в LINQ… Хотя у него «Не было времени» показать мне, как это сделать.
3. Я также замечаю, что «=» не работает, поэтому необходимо выполнить следующее: запрос = строка. Format(» И (ChangeToDT >= #{0}# И ChangeToDT <= #{1}#)», Обнаружено изменение. Добавить минуты(-1). toString(«ММ / дд/гггг ЧЧ: мм»), обнаружено изменение. Добавьте минуты (1). toString(«ММ / дд/гггг ЧЧ: мм»));
4.
=
Работает, еслиChangeToDT
указана только дата. Если оно также содержит время, было бы разумнее удалить его, если вас это не волнует.