2017-01-29 2 views
0

クエリ文字列が顧客注文と等しいOrdersテーブルのレコードを更新しようとしています。テーブル内のです。これは、私が試したものです:linqとの比較を使用して特定のレコードを更新するにはどうすればよいですか?

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

しかし、これは最初のレコードだけを更新するのではなく、答えとしてマークすることはできませんが、質問した通りに進捗をマークしたかったのですが...やや

+0

OrderNumは正しい順序のIDですか? – GeorgeChond

+1

LINQクエリは要素を返しません、そして、あなたはそれが '正確なもの'を持つことを期待しています。あなたはそれをデバッグする必要があります、間違った入力値、間違ったクエリ(そのフィールドは期待どおりに設定されていない可能性があります)、dbが初期化されていないか、接続が間違っています。 – NSGaga

+0

'mynum'は有効なOrderです番号? – Shyju

答えて

1

おそらくあなたは間違ったことをしており、注文はdbに保存されていません。 Sequence contains no elementsは、クエリが何も返されなかったことを意味します。最初に正しく挿入されているかどうかを確認してください(SQL Serverデータエクスプローラを使用するのが簡単です)。 OrderNumはあなたのテーブルの主キーであるよう

また、(速いSingleよりもある)Find(key)を使用してみてください代わりに、次のように:

order = db.Orders.Find(mynum); 
+1

ジョージ、以前の「OrderNum」はプライマリキーではないと言っていたので、Orders Tableには「OrderNum」という列が含まれています。あなたは正しいですが、注文はDBに保存されましたが、クエリは空白に戻りました。問題を解決するために、私はクエリ文字列を渡します。次に、私のアクション結果の引数にクエリ文字列値を指定することで、編集と保存を1つの脆弱性で実行することができました。これは、単一、第1、第1、またはデフォルトを使用することを可能にします。私が 'ToList()'を使ってみると、Visual Studioはリストをモデルに変換することができないと不平を言う。それは別の問題ですので、別に投稿します – Skullomania

+1

私の質問を見てください。私はそれを編集して、この特定の問題をどのように修正したかを確認することができました。私はこの特定の質問に対する答えを見つけるのを助けてくれたので、あなたの答えをアップアップしました。 – Skullomania

+0

助けてくれてうれしいです。 – GeorgeChond

関連する問題