无法将源类型system.nullable转换为目标类型int

时间:2015-07-03 23:57:04

标签: c# linq entity-framework-5

在尝试使用实体框架检索数据时,我一直收到以下错误消息 并分配给我的自定义类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>();

我该如何处理?

3 个答案:

答案 0 :(得分:2)

显然,j.cost7j.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更改Int32Nullable<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),