1

问题

鉴于以下情况:

class MyClass
{
    public DateTime DateTime { get; set; }
}

和一个可查询的,其中MyTable.NullableDateTimeaDateTime?映射到 SQL datetime

IQueryable<MyTable> table = //something

NullableDateTime当行的列为时,运行以下命令会产生异常NULL

table.Select(row => new MyClass
{
    DateTime = Convert.ToDateTime(row.NullableDateTime)
}).ToArray();

错误是:

无效操作异常

不能将 null 值分配给 System.DateTime 类型的成员,该类型是不可为 null 的值类型。

我试过的

  1. 查看生成的 SQL:

    CONVERT(DateTime,[t0].[NullableDateTime]) AS [NullableDateTime]
    
  2. 在执行之前运行查询Select。这可以解决问题,但我不想在客户端运行它只是为了解决问题。

  3. 使用row.GetDefaultValue()而不是Convert.ToDateTime. 这会产生一个不同的错误:

    异常

    将 char 数据类型转换为 datetime 数据类型会导致 datetime 值超出范围。

    GetDefaultValue方法调用转换为以下 SQL :

    COALESCE([t0].[NullableDateTime],'1/01/0001 12:00:00 AM') AS [NullableDateTime]
    
4

1 回答 1

2

可能您需要使用??具有 DateTime 某些默认值的运算符(但不是default(DateTime)因为它的值 1/01/0001 12:00:00 AM 超出了 SQL datetime 类型的有效值范围。您可能可以使用SqlDateTime.MinValue.Value在右侧??

于 2013-05-22T07:14:06.130 回答