System.Linq.Dynamic и DateTime

Я использую System.Linq.Dynamic, чтобы сделать пользовательские предложения where из вызова ajax в.Net MVC 1.0.

Он отлично работает для строк, int и т. Д., Но не для DateTime, я получаю исключение, не могу сравнить String с DateTime. Очень простой тестовый код

items = items.Where(string.Format(@" {0} > {1}{2}{1} ", searchField, delimiter, searchString));

Где searchField будет, например, start_date, а тип данных - DateTime, delimiter - это " (пробовал также и без ничего), а searchString будет 01-янв-2009 (пробовал также с 01/01/2009), а элементы IQueryable из LinqToSql.

Есть ли способ указать тип данных в динамическом где, или есть лучший подход. В настоящее время уже используется некоторое отражение, чтобы определить, какой тип разделителя требуется.

5 ответов

Решение

Я думаю, что вы можете преобразовать searchString в DateTime и передать его в качестве параметра динамическому методу where.

itmes = items.Where( string.Format( "{0} > @0", searchField ),
                     DateTime.Parse( searchString ) );
yourlist.Where("PostDate > DateTime(2013, 07, 24)");

Я использовал Convert.ToDateTime для решения этой проблемы, так как я делаю что-то похожее на Kappasims

items = items.Where(string.Format("{0} > Convert.ToDateTime(\"{1}\")", searchField, searchValue); 

Если вы хотите сделать это только с Where([string]) формат, не передавая другие параметры, вы можете использовать формат даты Date(yyyy, mm, dd), Таким образом, я смог заставить это работать, делая

items.Where("DateAdded > Date(2013, 06, 18)")

Здесь есть полная спецификация, которая описывает синтаксический анализ и правильное использование.

Что, если вся лямбда создается динамически (мы будем использовать равно, а не больше), а тип неизвестен? В этом случае вы не можете использовать DateTime.Parse в параметрах where. Если вы попытаетесь передать объект DateTime, Dynamic LINQ интерпретирует его как тип int32. Не могли бы вы сделать это, сначала преобразовав тики или миллисекунды в DateTime и сравнив их?

Другие вопросы по тегам