在尝试使用实体框架检索数据时,我一直收到以下错误消息 并分配给我的自定义类Customer
无法转换来源类型&system;系统内容'定位类型' int'
CustomerNumber和Route的数据类型为Int32,数据库中的字段允许空值
select new Customer()
{
AccountListId = j.cost1,
Csr = j.cost2,
CustomerName = j.cost3,
Address = j.cost4,
Telephone = j.cost5,
Contact = j.cost6,
CustomerNumber = j.cost7,
Branch = j.cost8,
Route = j.cost9,
}).ToList<Customer>();
我该如何处理?
答案 0 :(得分:2)
显然,j.cost7
和j.cost9
的类型为Nullable<Int32>
。我假设,因为你还没有向我们展示。
显然,您无法将Nullable<Int32>
分配给Int32
类型,因为如果值为null
,您会怎么做?编译器不知道。您需要决定在这种情况下要做什么,并相应地编码。
假设您决定在数据库中-1
值的情况下将null
指定为默认值,那么您可以使用null-coalescing operator并执行类似的操作这样:
select new Customer()
{
AccountListId = j.cost1,
Csr = j.cost2,
CustomerName = j.cost3,
Address = j.cost4,
Telephone = j.cost5,
Contact = j.cost6,
CustomerNumber = j.cost7 ?? -1,
Branch = j.cost8,
Route = j.cost9 ?? -1,
}).ToList<Customer>();
如果您真正想要的是,如果有null
值,则可以存储CustomerNumber
值,然后从Route
更改Int32
和Nullable<Int32>
的类型到int?
,或使用其他语法:pull
。
答案 1 :(得分:0)
尝试
if (j.cost7 == null)
{
CustomerNumber = 0;
}
else
{
CustomerNumber = j.cost7
}
答案 2 :(得分:0)
您可以使用int的默认值。
例如:
CustomerNumber = j.cost7 ?? default(int),
Branch = j.cost8,
Route = j.cost9 ?? default(int),