【问题标题】:DateTime, DateTime? and LINQ日期时间,日期时间?和 LINQ
【发布时间】:2008-10-04 02:58:23
【问题描述】:

当我使用具有 DateTime 字段的 LINQ 检索记录时,只有 ToString() 可用。

其他 DateTime 方法在哪里?

我必须将 DateTime 转换为 Convert.ToDateTime 吗?字段返回?

(日期时间)和(日期时间)有什么区别?

【问题讨论】:

    标签: .net linq datetime


    【解决方案1】:

    如果 DateTime? 你的意思是 Nullable<DateTime>,那么你可以通过 DateTime?.Value 属性获取 DateTime 值。 p>

    【讨论】:

    • ...或通过投射日期时间?进入日期时间。无论哪种情况,你都应该先检查它是否为空,否则你会得到一个异常。
    • 谢谢!我知道那是差不多一年前的事了,但你的回答让我无法发布新问题。
    【解决方案2】:

    在 SQL 中,DateTimes 允许为空。在 C# 中,日期时间不能为空。您可以阅读一些关于nullable value types 的信息。由于值类型变量不能为空,因此创建了一个泛型类来处理这种情况。它被称为 Nullable,通常在类型后面加上问号。

    为了使用这些值,您需要检查 .HasValue 属性。它是一个布尔值,它知道对象中是否有值或者它是否为空。一旦您检查了 .HasValue 属性是否为真,您就可以安全地使用 .Value 属性。 .Value 属性的类型为 DateTime。

    【讨论】:

    • HasValue 对我在 LINQ 查询中检查可能为 NULL 的整数值很有帮助:c.Field(Of Integer?)("SecondaryID").HasValue
    【解决方案3】:

    在 SQL 中,您将 DateTime 字段设置为 Allow Null。然后在 LINQ 中,当您要访问该字段时,.NET 不知道该字段是否真的是一个日期,这就是为什么您必须在任何日期方法可供您使用之前使用 Convert.ToDateTime() 的原因。

    如果该字段将始终包含日期,请将数据库列设置为 NOT NULL,这样就可以了。

    【讨论】:

      【解决方案4】:

      除了命名空间冲突之外,我知道 SQL 的日期时间与 C# 日期时间有不同的纪元(因此有效日期范围也不同)。

      尝试将new DateTime() 发送到存储过程,看看我的意思。

      【讨论】:

        猜你喜欢
        • 2012-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-19
        • 2013-06-16
        • 2014-11-10
        • 2013-10-02
        • 2016-07-05
        相关资源
        最近更新 更多