问题
鉴于以下情况:
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 的值类型。
我试过的
查看生成的 SQL:
CONVERT(DateTime,[t0].[NullableDateTime]) AS [NullableDateTime]在执行之前运行查询
Select。这可以解决问题,但我不想在客户端运行它只是为了解决问题。使用
row.GetDefaultValue()而不是Convert.ToDateTime. 这会产生一个不同的错误:异常
将 char 数据类型转换为 datetime 数据类型会导致 datetime 值超出范围。
GetDefaultValue方法调用转换为以下 SQL :COALESCE([t0].[NullableDateTime],'1/01/0001 12:00:00 AM') AS [NullableDateTime]