Сравнение Date / DateTime - PullRequest
       10

Сравнение Date / DateTime

1 голос
/ 31 июля 2009

У меня есть метод, который принимает ObjectQuery и добавляет к нему предложения Where в зависимости от того, получает ли он значения для различных параметров фильтра. Метод должен возвращать ObjectQuery. Как я могу сделать базовое сравнение дат, например, где dateX

Это мой текущий код:

if (myDateFilter != null)
{
    query = query.Where(
        string.Format(
            "it.ExpireDate < cast('{0}' as System.DateTime)",
            myDateFilter));
}

Поскольку myDateFilter имеет значение DateTime.Now, этот код говорит: System.Data.SqlClient.SqlException: преобразование типа данных varchar в тип данных datetime привело к значению вне диапазона.

Все остальные параметры являются строковыми или целочисленными фильтрами, поэтому их не проблема реализовать. Есть идеи ??

1 Ответ

0 голосов
/ 01 августа 2009

Вам нужно будет знать формат ввода данных пользователем. Посмотрите на функции DateTime.Parse и ParseExact.

http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx

Вы можете использовать их для разбора любой входной строки на допустимое время и дату, если вы знаете формат. Также есть некоторые культурные инварианты.

Хорошая защита от этого - всегда форматировать дату из DateTimePicker и т. Д. Для использования длинного формата (ГГГГММДД ЧЧ: ММ: СС). Есть строка формата, которая указывает .Net сделать это, но я не могу вспомнить это сейчас.

Если вы принимаете строки из пользовательского ввода, вам нужно будет принять во внимание CurrentCulture (та же ссылка выше поможет).

...