LINQ to SQL错误。 -类型无法转换为可为空的值

时间:2019-09-09 19:48:24

标签: c#

有时,当我使用LINQ to SQL时,我收到一条消息错误: “无法将类型转换为可为空的值。”

有人知道原因吗?

谢谢。

3 个答案:

答案 0 :(得分:1)

sql中的列不可为空,并且您传递的值可以为null。

例如通过

 DateTime? createdon 

到表中需要在日期时间创建

答案 1 :(得分:1)

考虑以下示例,表/字段:

Customer.CustomerId (int)
Customer.Code (int)

考虑另一个表/字段:

Sale.CustomerId (nullable<int>)

Sale.CustomerId字段引用了Customer.CustomerId字段。但是Sale.CustomerId字段可以为空。如果您的LINQ显示如下:Sale.Customer.Code,则Code字段可以生成可为空的整数值,并引发错误,因为在Sale表中Customer是可选的。客户匿名类型需要一个整数值,但此刻该值可以为空。为了安全起见,将字段Sale.Customer.Code键入为int?。 (可为空的整数)。更改:

Code = Sale.Customer.Code 

到(int?)

Code = (int?)Sale.Customer.Code

然后重试!

答案 2 :(得分:0)

有时您想将一个Nullable值(例如int? Or Nullable<int>等)分配为非null值(例如int)。 为了避免这种异常,您必须在将对象赋值之前将其强制转换为Nullable值,例如以下代码:

int a = 1; //a is int and not null value
int? b = 2; //b is nullable int
a = b; //with this line code you will see compile error
a = b.value; //this is the correct syntax