0

Я использую this implementation для проведения поиска на стороне сервера с использованием Entity Framework для jqGrid. Проблема, которую я испытываю, заключается в том, что, хотя поиск работает отлично для текстовых или числовых полей, поиск с использованием значений DateTime не работает.CLR Сравнение объектов DateTime с SQL Server DateTime

Проблема заключается в том, что объект DateTime в классе модели отправляет строковое представление объекта (то есть в формате 2/9/2014 12:00:00 AM) в базу данных, но база данных отформатирована как 2014-09-03 00:00:00:000. В результате сравнение всегда терпит неудачу.

Я не могу изменить свое свойство DateTime на строку, чтобы я был в тупике. Результат возвращается через хранимую процедуру (простой SELECT * FROM [TableName]), поэтому я попытался форматировать связанное поле Date и вернуть его, но он возвращается как nvarchar.

Кто-нибудь сталкивался с этим раньше или имел какие-либо рекомендации относительно того, как решить эту проблему? Буду признателен за любую помощь, спасибо!

ответ

0

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

1) Сделаны следующие изменения в классе поддержки JQGrid:

_formatObjects.Add(parseMethod.Invoke(props[rule.field], new object[] { rule.data })); 

к

_formatObjects.Add(parseMethod.Invoke(props[rule.field], new object[] { (parseMethod.ReturnType.FullName == "System.DateTime" && rule.data != "") ? Convert.ToDateTime(rule.data, CultureInfo.CreateSpecificCulture("fr-FR")).ToString() : rule.data })); 

2a) В моем контроллере, я добавил следующий бит кода всякий раз, когда я извлекал непосредственно из таблицы (вы должны явно указать имена столбцов, чтобы усечь временную часть):

//For matching date instead of datetime values 
if (wc.Clause.Contains("Date")) 
{ 
    wc.Clause = wc.Clause.Replace("DeliveryDate", "DbFunctions.TruncateTime(DeliveryDate)"); 
} 
results = results.Where(wc.Clause, wc.FormatObjects); 

2b) Если данные были возвращены из хранимой процедуры, я просто вернул соответствующее поле Date из SP (этот подход будет работать для полей DateTime, только если часть метки времени - это все нули).

Надеюсь, это поможет кому-то еще.