如何从LINQ将Sql DateTime设置为null

时间:2011-04-16 08:34:10

标签: c# linq linq-to-sql datetime null

我有两种情况需要将Sql中的DateTime字段设置为null。我使用C#和LINQ to SQL Classes。我读了很多关于stackoverflow的问题,这些问题就像我的问题一样,但我仍然有点不同。

当我们插入新客户时。

对应代码:

 Customer customer = new Customer();
 customer.CustomerName = txt_name.Text;
 customer.DOB = dtp_dob.Checked ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) : //send null here;

customer.DOB是System.DateTime。

我尝试的是:

1)

 customer.DOB = dtp_dob.Checked ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) : SqlDateTime.Null;

但是这不会成功,因为SqlDateTime无法转换为System.DateTime。

2)

    DateTime? nullDateTime = new DateTime();
 customer.DOB = dtp_dob.Checked ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) : nullDateTime.Value

在这种情况下,构建成功但会抛出SqlDateTime溢出异常。

那么如何传递空值

LINQ Dataclass中DOB成员的属性

enter image description here

他们中的许多人建议将“自动生成值”设置为true,而不是插入任何值。没错,它适用于插入案例。

但现在假设已经有一个客户条目,其中某个日期时间值设置为DOB字段。现在用户想要清除这个值(删除生日),然后在这种情况下我必须使用UpdateOn传递一个空值来清除相应客户行中提交的日期时间。

非常感谢您提前:))

2 个答案:

答案 0 :(得分:15)

你应该可以使用:

Customer customer = new Customer();
customer.CustomerName = txt_name.Text;
customer.DOB = dtp_dob.Checked 
                  ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) 
                  : (DateTime?) null;

请注意nullDateTime?的演员表。当前的问题是编译器无法根据操作数计算出条件表达式的类型。

您第二次尝试的问题是您正在创建一个新的不可为空的DateTime值,即公元0001年1月1日。您可以将其更改为:

DateTime? nullDateTime = null;
customer.DOB = dtp_dob.Checked 
                  ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) 
                  : nullDateTime;

答案 1 :(得分:0)

试试

if(dtp_dob.Checked )
{
   customer.DOB = DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd"));
}
else
{
   cstomer.DOB =null;
}

因为DOB可以为空,所以这段代码会给你你想要的东西。 BTW我找不到像nullDateTime.Value

这样的东西