我正在尝试在查询中使用比较日期。我有 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 时间。请使用可为空的类型。
当上述条件为真时(值不为空,那么我想在查询中超过以下语句(
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# 中的查询中使用执行条件。
是的,这是因为您的值null
在数据表中。您应该将where
条件中的行更改为(请注意可为空的日期时间DateTime?
(
(Convert.ToString(d.Field<DateTime?>("CONTRACT_START"))!=null)
精通MySql,但你肯定用错了DateTime
。在 c# 中,DateTime
是结构的,这意味着它不能null
。
您必须在 c# 项目中改用可为空的日期(MSDN:使用可为空的类型(:
DateTime? dateTime;