我有一个接受ObjectQuery的方法,并根据它是否接收各种过滤器参数的值来向其添加Where子句。该方法必须返回ObjectQuery。如何进行基本的日期比较,例如其中dateX< dateY。
这是我目前的代码:
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 :(得分:0)
您必须知道用户输入数据的格式。看一下DateTime.Parse和ParseExact函数。
http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx
如果您知道格式,可以使用它们将任何输入字符串解析为有效的日期时间。还有一些文化不变量。
对此的良好保护是始终从DateTimePicker等格式化日期以使用长格式(YYYYMMDD HH:MM:SS)。有一个格式字符串告诉.Net这样做,但我现在不记得了。
如果您接受来自用户输入的字符串,则必须考虑CurrentCulture(上面的相同链接有帮助)。