如何使用linq进行比较来更新特定记录?

时间:2017-01-29 17:03:42

标签: c# asp.net-mvc linq

我正在尝试更新Orders表中的记录,其中查询字符串等于客户订单或表中的OrderNum。这就是我的尝试:

public ActionResult Checkout(Order order)
{
    string newNum = Request.Params["unum"];
    int mynum = 0;
    bool res = int.TryParse(newNum, out mynum);

    //order = db.Orders.Single(o => mynum == o.OrderNum); - tried this first
    order = db.Orders.Single(o => o.OrderNum == mynum);
    order.RecievedShirt = false;
    order.OrderCompleted = true;
    db.SaveChanges();

    var AuthenticationManager = HttpContext.GetOwinContext().Authentication;
    AuthenticationManager.SignOut();
    return RedirectToAction("Purchased","Orders");
}

返回的错误是序列不包含任何元素

被修改

我可以通过执行以下操作来解决此特定问题。购物车中结帐按钮上的操作链接:

@Html.ActionLink("Checkout", "Checkout", new { unum = ViewBag.Data}, htmlAttributes: new { @class = "checkout-btn" })

然后我对行动进行了以下更新:

public ActionResult Checkout(Order order, int ? unum)

然后我改变了linq来反映:

order = db.Orders.FirstOrDefault(o => unum == o.OrderNum);

但是,因为这只更新了第一条记录而不是全部我无法将其标记为答案,但是希望将其标记为进度,因为它确实解决了我问的问题......有点

1 个答案:

答案 0 :(得分:1)

可能你做错了,订单没有保存在数据库中。 Sequence contains no elements表示您的查询没有返回任何内容,因此请先检查它是否正确插入(使用SQL Server数据资源管理器是一种简单的方法)。

此外,由于OrderNum是表格中的主键,请尝试使用Find(key)(也比Single更快),如下所示:

order = db.Orders.Find(mynum);