Подтвердить что ты не робот

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, разделитель, searchString));

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

yourlist.Where("PostDate > DateTime(2013, 07, 24)");

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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