比较SQL和C#

时间:2017-06-16 13:32:44

标签: c# mysql sql-server

我正在尝试在查询中使用比较日期。我有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#中使用查询执行条件。

2 个答案:

答案 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)