【问题标题】:ObjectQuery, passing datetime in Where clause filterObjectQuery,在 Where 子句过滤器中传递日期时间
【发布时间】:2010-12-12 22:55:45
【问题描述】:

这里如何传入日期时间值?

ObjectQuery<Item> _Query = ItemEntities.CreateQuery<Item>("Item");
_Query = _Query.Where("(it.StartDate >= 11/4/2009 5:06:08 PM)");

我上面的示例代码似乎确实有效。

即使这样

ObjectQuery<Item> _Query = ItemEntities.CreateQuery<Item>("Item");
_Query = _Query.Where("(it.StartDate >= \"11/4/2009 5:06:08 PM\")");

我在 EDM 中遇到类型转换错误。

【问题讨论】:

    标签: c# objectquery


    【解决方案1】:

    以下应该有效:

    ObjectQuery<Item> _Query = ItemEntities.CreateQuery<Item>("Item");
    _Query = _Query.Where("(it.StartDate >= DATETIME'11/4/2009 17:06:08')");
    

    有关 ESQL 查询中文字的更多信息,请参阅 documentation

    【讨论】:

    • 仍然不起作用,这给了我这个错误“参数类型 'Edm.DateTime' 和 'Edm.String' 与此操作不兼容。在 WHERE 谓词附近,第 6 行,第 15 列。”
    • @Juvil:我更新了代码 sn-p 以包含 DATETIME 限定符,这是区分日期/时间文字和字符串文字所需的。
    【解决方案2】:

    不幸的是,@pmarflee 的回答不起作用。我找到了另一个对应MSDN的解决方案:

    日期部分的格式必须为:YYYY-MM-DD,其中 YYYY 是四 数字年份值介于 0001 和 9999 之间,MM 是介于 1 和 12 和 DD 是对给定月份 MM 有效的日期值。

    时间部分的格式必须为:HH:MM[:SS[.fffffff]],其中 HH 为 0 到 23 之间的小时值,MM 是 0 到 23 之间的分钟值 59,SS 是 0 到 59 之间的第二个值,而 fffffff 是 0 到 9999999 之间的小数秒值。所有值范围均为 包括的。小数秒是可选的。秒是可选的 除非指定了小数秒;在这种情况下,秒是 必需的。如果未指定秒或小数秒,则 将使用默认值零。

    DATETIME 符号和 文字负载,但没有新行。

    DATETIME'2006-10-1 23:11'
    DATETIME'2006-12-25 01:01:00.0000000' -- 与 DATETIME'2006-12-25 01:01' 相同

    还有代码本身:

    DateTime dateTimeValue = DateTime.Now;
    // ESQL DATETIME format MUST be <yyyy-MM-dd HH:mm> format                                 
    _Query = _Query.Where(string.Format("(it.StartDate >= DATETIME'{0:yyyy-MM-dd HH:mm}')",dateTimeValue);
    

    【讨论】:

    猜你喜欢
    • 2013-05-08
    • 2018-11-03
    • 2017-06-05
    • 1970-01-01
    • 2015-10-19
    • 2022-05-05
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    相关资源
    最近更新 更多