【问题标题】:How do I update specific records using a comparison with linq?如何使用与 linq 的比较来更新特定记录?
【发布时间】:2017-06-14 21:08:53
【问题描述】:

我正在尝试更新我的 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");
}

返回的错误是Sequence contains no elements

已编辑

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

@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);

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

【问题讨论】:

  • OrderNum 是订单的ID吧?
  • 它告诉您 LINQ 查询不返回任何元素,并且您希望它具有“精确的一个”。你需要调试它,你做错了什么,错误的输入值,错误的查询(该字段可能没有按照你的预期设置),数据库未初始化或连接错误等。
  • mynum 是有效的订单号?
  • @Shyju 是的!
  • OrderNum是表的主键吗?

标签: c# asp.net-mvc linq


【解决方案1】:

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

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

order = db.Orders.Find(mynum);

【讨论】:

  • George,正如我之前所说的,OrderNum 不是 Orders 表包含 OrderNum 列的主键。您是对的,订单已保存在数据库中,但查询返回空白。为了解决这个问题,我传递了查询字符串。然后,使用我的操作结果参数中的查询字符串值,我能够执行我的编辑并保存一个缺陷。它将允许我使用单个、第一个或第一个或默认值。当我尝试使用 ToList() 时,Visual Studio 抱怨我无法将列表转换为模型。由于这是一个不同的问题,我将单独发布它
  • 看看我的问题。我对其进行了编辑,以便您可以看到我是如何解决这个特定问题的。我确实赞成你的回答,因为你确实帮助我找到了这个特定问题的答案。
  • 很高兴它有帮助。
猜你喜欢
  • 1970-01-01
  • 2013-12-01
  • 1970-01-01
  • 2017-08-26
  • 1970-01-01
  • 2014-01-23
  • 1970-01-01
  • 1970-01-01
  • 2021-05-10
相关资源
最近更新 更多