C# System.Linq.Dynamic和DateTime

C# System.Linq.Dynamic和DateTime,c#,linq,dynamic,system.linq.dynamic,C#,Linq,Dynamic,System.linq.dynamic,我使用System.Linq.Dynamic从.NETMVC1.0中的ajax调用中定制where子句 它适用于字符串、int等,但不适用于DateTime,我得到一个异常:无法将字符串与DateTime进行比较。非常简单的测试代码是 items=items.Where(string.Format(@{0}>{1}{2}{1}),searchField,delimiter,searchString) 其中searchField将是例如start_date,数据类型是DateTime,分隔符是“(

我使用System.Linq.Dynamic从.NETMVC1.0中的ajax调用中定制where子句

它适用于字符串、int等,但不适用于DateTime,我得到一个异常:无法将字符串与DateTime进行比较。非常简单的测试代码是

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

其中searchField将是例如start_date,数据类型是DateTime,分隔符是“(也不尝试任何内容),searchString将是01-Jan-2009(也尝试了01/01/2009),items是LinqToSql中的IQueryable


是否有一种方法可以在动态where中指定数据类型,或者有更好的方法。它目前已经在使用一些反射来确定需要什么类型的分隔符。

我认为您可以将searchString转换为DateTime,并将其作为参数传递给动态where方法本身

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

如果整个lambda是动态创建的(我们将使用等于而不是大于)并且类型未知?在这种情况下,您不能使用DateTime。在where参数中解析。如果您尝试传入DateTime对象,Dynamic LINQ会将其解释为int32类型。您是否可以先转换DateTime的节拍或毫秒,然后进行比较?

我使用Convert.ToDateTime解决了这个问题,正如我所说的那样我在做类似卡帕西姆斯的事情

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

如果只想使用
Where([string])
格式执行此操作,而不传递其他参数,则可以使用日期格式
date(yyyy,mm,dd)
。因此,我可以通过

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

有一个完整的规范概述了解析和有效使用。

Thank items=items.Where(string.Format(“{0}>@0”,searchField),new DateTime(2001,1,15));非常有效当一个问题的答案有大量的投票,但问题本身却有0个投票时,我总是感到非常困惑。跛脚。好问题,我来这里是因为我需要同样的东西!投票给你,好先生!我已经看到了很多这样的建议,但它不适用于我-
LINQ to Entities失败识别方法“System.DateTime ToDateTime(System.String)”
我对该建议有相同的问题。在哪个sql server中工作?
yourlist.Where("PostDate > DateTime(2013, 07, 24)");