你好,我有以下问题。在 sqlserver 数据库中,我有一个带有日期时间字段的实体,我生成了 2 个新的日期字段并从数据库更新了我的模型。字段导入没有问题,我将它们添加到相应的类中,并且在进行查询时它告诉我:
不能转换类型 System.DateTime?在 System.DateTime 中,已存在显式转换
这是声明起作用的字段的方式:
public DateTime FechaCreacion {get;set;}
public DateTime FechaModif {get;set;}
还有我要添加的:
public DateTime FechaAsign { get; set; }
public DateTime FechaCierre { get; set; }
我的查询:
query = (from q in _conexion.Ticket_Cab where [bla..bla..bla]
select new Ticket {[bla..bla] FechaCreacion = q.tik_fechacreacion,
FechaModif = q.tik_fechamodif, FechaAsign = q.tik_fechaAsign,
FechaCierre = q.tik_fechaCierre}).ToList();
最后两个字段(q.tik_fechaAsign , q.tik_fechaCierre )
带有红色下划线,它向我抛出了我上面引用的错误。有谁知道可能会发生什么?
分配带有 类型的值时会出现问题
Nullable<DateTime>
,DateTime
目前,您以下列方式声明日期:DateTime
是一个不能分配给的结构null
,我认为任何结构都一样。因此,您必须将变量声明为能够按值接收
null
的值,并且可以通过以下方式1执行此操作:或者以“漂亮”的方式:
发生这种情况是因为在数据库中表的声明中,表
null
在这些字段中按值接受。如果您希望字段与以前的字段相同,则应尝试
NOT NULL
在数据库中表的定义中添加该子句。请注意,通过在类中使用类型,您不会直接访问内部
Nullable<T>
成员,而是使用对象的属性。DateTime
.Value
要访问您在查询中定义的实际值
DateTime
,您必须执行以下操作:更不用说您需要进行检查
null
以检查该字段的当前值。另一种选择:
而不是改变你的类定义
Ticket
,你可以对查询进行检查,它应该工作得很好,除了你在类中没有任何值null
,你可以使用一个值01/01/1865 00:00:00 AM
来表示一个值 false或null
。查询如下所示:
01/01/1800
表明您的值为 false 或 的日期在哪里null
?1
using System;
:使用此方法时必须做的。在您的数据库中,它们肯定可以是空值,这会导致您进行编辑:
如果它在查询中引发错误
您在下一个字段中重复相同的动作
您在哪里使用数据
q.tik_fechaAsign
并将其q.tik_fechaCierre
放置.Value
在以下位置:这是因为
q.tik_fechaAsign
andq.tik_fechaCierre
被声明为DateTime?
,也就是说,它们是Nullable
,它们可能包含也可能不包含值,并且在使用它们时需要输入您正在使用的值。