如何从LINQ将Sql DateTime设置为null

5

我有两种情况需要将Sql中的DateTime字段设置为null。我使用C#和LINQ to SQL类。我在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;

客户的出生日期是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成员的属性。
许多人建议将自动生成的值设置为true,不要插入任何值。确实,在插入的情况下有效。
但现在假设已经存在一个客户条目,其中某些日期时间值已经设置为DOB字段。现在用户想要清除此值(删除出生日期),则在这种情况下,我必须使用UpdateOn来传递空值以清除相应客户行中的datetime字段。
非常感谢您的帮助 :)

它是可空的,你为什么不把它设置为“null”呢? - Jeff Mercado
如果该列可为空,则Customer.DOB应为DateTime?而不是DateTime - Jon Skeet
2个回答

17

你应该能够使用:

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;

注意将 null 转换为 DateTime?。当前问题是编译器无法根据操作数确定条件表达式的类型。

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

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

0

请尝试

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

由于DOB是可空的,所以这段代码将会给你想要的结果。顺便说一下,我找不到类似于nullDateTime.Value的东西。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接