MAX() - 方法的结果

时间:2014-03-22 15:05:33

标签: asp.net-mvc

我有表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"时出错,因为物化值为空。"

2 个答案:

答案 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;
}