我正在尝试在查询中使用比较日期。我有d和p是从不同数据表中选择的行。我想根据条件从数据表中检索字段。我有以下条件,但当下面的任何一个日期为空或空时抛出错误。
我试过以下陈述 -
join d in Data.AsEnumerable()
on p.Field<String>("EMPLID") equals
d.Field<String>("EMPLID")
where (Convert.ToString(d.Field<DateTime>("CONTRACT_START"))!=null) && (Convert.ToString(d.Field<DateTime>("SIGNED_DT"))!=null) && (Convert.ToString(d.Field<String>("ACT_DT"))!=null)
抛出错误 - 无法将DBNull.Value强制转换为Sysytem .date Time。请使用可空类型。
当上述条件为真时(值不为null,那么我想在查询中区分下面的语句)
where (d.Field<DateTime>("CONTRACT_START") >= sd && d.Field<DateTime>("CONTRACT_START") <= ed) ||Convert.ToString(d.Field<DateTime>("SIGNED_DT"))!=" " && d.Field<DateTime>("SIGNED_DT") > d.Field<DateTime>("CONTRACT_START") || d.Field<DateTime>("ACT_DT") > d.Field<DateTime>("CONTRACT_START"))
如何检查值是否为null,然后在C#中使用查询执行条件。
答案 0 :(得分:1)
我不熟练使用MySql,但你绝对错误地使用DateTime
。在c#DateTime
中是struct,这意味着它不能是null
。
您必须在c#项目中使用Nullable日期(MSDN: Using Nullable Types):
DateTime? dateTime;
答案 1 :(得分:1)
是的,这是因为您的数据表中的值为null
。您应该将where
条件中的行更改为(请注意可为空的DateTime DateTime?
)
(Convert.ToString(d.Field<DateTime?>("CONTRACT_START"))!=null)