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

Cannot convert source type system.nullable to target type int

我在尝试使用 entity framework 检索数据时不断收到以下错误消息 并分配给我的自定义 class 客户

无法将源类型 'system.nullable' 转换为目标类型 '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>();

我该如何处理?

尝试

if (j.cost7 == null)
{
    CustomerNumber = 0;
}
else
{
    CustomerNumber = j.cost7
}

显然,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 值(如果有的话),然后将 CustomerNumberRoute 的类型从 Int32Nullable<Int32>,或使用替代语法:int?.

您可以使用 int 的默认值。

例如:

CustomerNumber = j.cost7 ?? default(int),
        Branch = j.cost8,
        Route = j.cost9 ?? default(int),