我有表tb_Orders(它为空),它有字段^ - order_id(int)(主键) - order_date nchar(30)
在我的应用程序中,当客户端下订单时,请求函数:
private int GetNewOrderId()
{
int ord_id = 0;
if (db.tb_Orders.Max(x => x.order_id) != null)
{
int ord = db.tb_Orders.Max(x => x.order_id);
ord_id = ord + 1;
}
else
{
ord_id = 1;
};
return ord_id;
}
获取新的订单ID(表中的最大订单为+1)。
运营商"如果"当表仍然为空时,必须得到id = 1;
但结果 - 错误(当我尝试获取id时)。
错误文本:"转换投射值类型" Int32"时出错,因为物化值为空。"
答案 0 :(得分:2)
在进行order_id
调用时,请尝试将Max
转换为可以为空的整数:
private int GetNewOrderId()
{
int nextOrderId = db.tb_Orders.Max(x => (int?)x.order_id) ?? 1;
return nextOrderId;
}
您还会注意到,在我的示例中,只有一个SQL查询到数据库,而您在if语句中创建了2:1,而另一个在内部。
答案 1 :(得分:1)
您的order_id
似乎是Nullable<int>
。使用Value
属性获取它的值,您也可以在if
语句之前执行查询,并且不要执行两次查询:
var max = db.tb_Orders.Max(x => x.order_id);
if(max != null)
{
int ord = max.Value;
ord_id = ord + 1;
}