1

我有一个方法,它接受一个 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 数据类型转换为 datetime 数据类型导致值超出范围。

所有其他参数都是字符串或整数过滤器,因此实现起来不是问题。有任何想法吗??

4

1 回答 1

0

您必须知道用户输入数据的格式。看看 DateTime.Parse 和 ParseExact 函数。

http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx

如果您知道格式,则可以使用它们将任何输入字符串解析为有效的日期时间。还有一些文化不变量。

一个很好的保护措施是始终从 DateTimePicker 等中格式化日期以使用长格式 (YYYYMMDD HH:MM:SS)。有一个格式字符串告诉.Net 这样做,但我现在不记得了。

如果您接受来自用户输入的字符串,则必须考虑 CurrentCulture(上面的相同链接有帮助)。

于 2009-07-31T21:59:39.890 回答