2017-01-29 5 views
0

Ich versuche Datensätze in meiner Orders-Tabelle zu aktualisieren, wobei die Abfragezeichenfolge der Kundenbestellung oder OrderNum in der Tabelle entspricht. Dies ist, was ich versucht habe:Wie aktualisiere ich bestimmte Datensätze mithilfe eines Vergleichs mit 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"); 
} 

Der Fehler, der zurückgegeben wird Sequenz enthält keine Elemente

Herausgegeben

konnte ich dieses spezielle Problem beheben, indem Sie folgendermaßen vorgehen. Action-Link auf der Checkout-Schaltfläche im Warenkorb:

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

Dann habe ich die folgenden Aktualisierungen der Aktion:

public ActionResult Checkout(Order order, int ? unum) 

Dann änderte ich die Linq zu reflektieren:

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

Da jedoch dies aktualisiert nur den ersten Datensatz anstelle von allem, was ich nicht als die Antwort markieren kann, aber wollte es als Fortschritt markieren, da es die Frage gelöst hat, die ich gestellt habe ... etwas

+0

OrderNum ist die ID der Bestellung richtig? – GeorgeChond

+1

es teilt Ihnen mit, dass LINQ-Abfrage keine Elemente zurückgibt, und Sie erwarten, dass es "genau eins" hat. Sie müssen es debuggen, Sie tun etwas falsch, falscher Eingabewert, falsche Abfrage (dieses Feld kann nicht so eingestellt werden, wie Sie es erwarten), db nicht initialisiert oder falsche Verbindung usw. – NSGaga

+0

'mynum' ist eine gültige Bestellung Nummer ? – Shyju

Antwort

1

Wahrscheinlich machen Sie etwas falsch und die Bestellung wird nicht in der Datenbank gespeichert. Sequence contains no elements bedeutet, dass Ihre Abfrage nichts zurückgegeben hat. Überprüfen Sie daher, ob sie korrekt zuerst eingefügt wurde (die Verwendung des SQL Server Data Explorer ist eine einfache Methode).

Auch als OrderNum ist der Primärschlüssel in der Tabelle, versuchen Find(key) anstelle (die auch schneller als die Single ist), wie folgt aus:

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

George, wie ich früher sagte "OrderNum" ist NICHT der Primärschlüssel die Orders Table enthält die Spalte 'OrderNum'. Sie hatten jedoch recht, die Bestellung wurde in der Datenbank gespeichert, aber die Abfrage wurde leer zurück. Um das Problem zu lösen, übergebe ich die Abfragezeichenfolge. Dann konnte ich mit dem Query-String-Wert in den Argumenten meines Action-Ergebnisses meine Bearbeitung durchführen und mit einem Fehler speichern. Es erlaubt mir, Single, First oder First oder Default zu verwenden. Wenn ich versuche, 'ToList()' zu verwenden, beschwert sich visuelles Studio, dass ich Liste in Modell nicht umwandeln kann. Da es ein anderes Problem ist, werde ich es separat veröffentlichen – Skullomania

+1

Werfen Sie einen Blick auf meine Frage. Ich habe es so bearbeitet, dass Sie sehen konnten, wie ich dieses spezifische Problem behoben habe.Ich habe deine Antwort verbessert, da du mir geholfen hast, die Antwort auf diese spezielle Frage zu finden. – Skullomania

+0

Froh, dass es geholfen hat. – GeorgeChond

Verwandte Themen