2009-07-31 2 views
1

У меня есть метод, который принимает ObjectQuery и добавляет предложения Where к нему в зависимости от того, получает ли он значения для различных параметров фильтра. Метод должен возвращать ObjectQuery. Как я могу выполнить базовое сравнение даты, например. где датаX < датаY.Сравнение Date/DateTime ine Entity SQL Where where

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

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

С myDateFilter, имеющим значение DateTime.Now, этот код говорит: System.Data.SqlClient.SqlException: Преобразование типа VARCHAR данных для данных даты и времени тип привел к превышению значения.

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

+0

OK, похоже, что я пытаюсь передать дату, которая принимает строчную форму '31/7/2009 ', которая ломается, но если я передаю' 1/1/2009 ', это работает, поэтому я думаю, что есть разница в культурах того, что в дБ и что происходит в приложении. Как я могу сравнить их в том же формате ????? Или каким-то культурным инвариантным способом ... – andrej351

ответ

0

Вам необходимо знать формат, который пользователь вводит данные. Взгляните на функции DateTime.Parse и ParseExact.

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

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

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

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

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

  • Нет связанных вопросов^_^