鉴于以下内容:
class MyClass
{
public DateTime DateTime { get; set; }
}
和可查询,其中MyTable.NullableDateTime
是映射到SQL DateTime?
的{{1}}:
datetime
当行的IQueryable<MyTable> table = //something
列为NullableDateTime
时,运行以下内容会产生异常:
NULL
错误是:
出现InvalidOperationException
无法将null值分配给System.DateTime类型的成员,该类型是不可为空的值类型。
查看生成的SQL:
table.Select(row => new MyClass
{
DateTime = Convert.ToDateTime(row.NullableDateTime)
}).ToArray();
在执行CONVERT(DateTime,[t0].[NullableDateTime]) AS [NullableDateTime]
之前运行查询。这解决了这个问题,但我不想在客户端运行它只是为了解决这个问题。
使用Select
代替row.GetDefaultValue()
。这会产生不同的错误:
SQLEXCEPTION
将char数据类型转换为datetime数据类型会导致日期时间值超出范围。
Convert.ToDateTime
方法调用转换为以下SQL:
GetDefaultValue
答案 0 :(得分:2)
您可能需要使用??
运算符使用DateTime的默认值(但不是default(DateTime)
,因为它的值为1/01/0001 12:00:00 AM超出了有效值的范围SQL日期时间类型。您可以在??
的右侧使用SqlDateTime.MinValue.Value。