C# 如何使用与linq的比较来更新特定记录?

C# 如何使用与linq的比较来更新特定记录?,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我正在尝试更新我的Orders表中的记录,其中查询字符串等于表中的customer order或OrderNum。这就是我尝试过的: public ActionResult Checkout(Order order) { string newNum = Request.Params["unum"]; int mynum = 0; bool res = int.TryParse(newNum, out mynum); //order = db.Orders.Sin

我正在尝试更新我的Orders表中的记录,其中查询字符串等于表中的customer order或
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);

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

您做错了什么,并且顺序没有保存在数据库中。
序列不包含任何元素
意味着您的查询没有返回任何内容,因此请先检查它是否正确插入(使用SQL Server数据资源管理器是一种简单的方法)

另外,由于
OrderNum
是表中的主键,请尝试使用(这也比
单键快),如下所示:

order = db.Orders.Find(mynum);

OrderNum是order的ID,对吗?它告诉您LINQ查询不返回任何元素,您希望它有“精确的一个”。您需要调试它,您做了一些错误的事情,输入值错误,查询错误(该字段可能未按预期设置),db未初始化或连接错误等。
mynum
是有效的订单号吗?@Shyju是的!
OrderNum
是表的主键吗?George,正如我前面所说的
OrderNum
不是主键,Orders表包含列
OrderNum
。但是您是对的,订单保存在数据库中,但查询返回为空。为了解决这个问题,我传递了查询字符串。然后,通过操作结果参数中的查询字符串值,我可以执行编辑和保存,但有一个缺陷。它允许我使用single、first、first或default。当我尝试使用
ToList()
时,VisualStudio抱怨我无法将列表转换为模型。由于这是一个不同的问题,我将单独发布,看看我的问题。我对其进行了编辑,以便您可以看到我是如何解决此特定问题的。我对你的答案投了赞成票,因为你确实帮助我找到了这个具体问题的答案。很高兴这有帮助。