问题
鉴于以下情况:
class MyClass
{
public DateTime DateTime { get; set; }
}
和一个可查询的,其中MyTable.NullableDateTime
aDateTime?
映射到 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]