比较Entity SQL Where子句中的Date / DateTime

时间:2009-07-31 06:12:40

标签: entity-framework datetime comparison entity-sql

我有一个接受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数据类型转换为日期时间数据类型会导致超出范围的值。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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