使用Convert将可空值转换为非可空值时的LINQ to SQL异常

时间:2013-05-22 06:33:19

标签: .net linq-to-sql null invalidoperationexception

问题

鉴于以下内容:

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

和可查询,其中MyTable.NullableDateTime是映射到SQL DateTime?的{​​{1}}:

datetime

当行的IQueryable<MyTable> table = //something 列为NullableDateTime时,运行以下内容会产生异常:

NULL

错误是:

  

出现InvalidOperationException

     

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

我尝试过什么

  1. 查看生成的SQL:

    table.Select(row => new MyClass
    {
        DateTime = Convert.ToDateTime(row.NullableDateTime)
    }).ToArray();
    
  2. 在执行CONVERT(DateTime,[t0].[NullableDateTime]) AS [NullableDateTime] 之前运行查询。这解决了这个问题,但我不想在客户端运行它只是为了解决这个问题。

  3. 使用Select代替row.GetDefaultValue()。这会产生不同的错误:

      

    SQLEXCEPTION

         

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

    Convert.ToDateTime方法调用转换为以下SQL:

    GetDefaultValue

1 个答案:

答案 0 :(得分:2)

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