如何从LINQ将Sql DateTime设置为null

Mar*_*hal 5 c# linq null datetime linq-to-sql

我有两种情况需要将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;
Run Code Online (Sandbox Code Playgroud)

customer.DOB是System.DateTime.

我尝试的是:

1)

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

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

2)

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

在这种情况下,构建成功但它将抛出SqlDateTime溢出异常.

那么如何传递null值

LINQ数据类中DOB成员的属性

在此输入图像描述

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

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

非常感谢你提前:)

Jon*_*eet 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;
Run Code Online (Sandbox Code Playgroud)

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

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

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