3 Stimmen

Fehler in MVC Proj beim Schreiben von Lambda-Ausdrücken

Ich erstelle eine Beispielanwendung für einen Film (MVC). Ich war immer gut mit Viewing und Erstellen eines neuen Datensatzes, aber wenn ich den Code schrieb, um die Details eines bestimmten Datensatzes zu erhalten, traf ich mit dem folgenden Fehler:

Unable to cast objec`t of type 'System.Data.Objects.ObjectQuery`1[MovieApp.Models.Movie]' to type 'MovieApp.Model`s.Movie'.

Hier ist der Code, den ich geschrieben habe, um die Details zu erhalten

public ActionResult Details(int id)
{
    var moviedetail = (Movie)_entities.MovieSet.Where(mvid => mvid.Id == id);
return View(moviedetail);
}

Kann mir jemand sagen, was falsch läuft und wo?

Ich danke Ihnen.

1voto

moi_meme Punkte 8688

Tun var moviedetail = (Movie)_entities.MovieSet.FirstOrDefault(mvid => mvid.Id == id);

Where wird verwendet, um eine Liste zurückzugeben, fügen Sie ToList() hinzu und Sie erhalten alle Elemente, die mit Ihrer ID übereinstimmen, wenn Sie sicher sind, dass es nur eines gibt, verwenden Sie First wird das erste übereinstimmende Element zurückgegeben, FirstOrDefault gibt das erste übereinstimmende Objekt zurück oder Ihr Standardobjekt (wahrscheinlich null), wenn es keine Übereinstimmung gibt.

1voto

dotcoder Punkte 2738

Das Problem in Ihrem Code ist die Funktion Where gibt Sie IEnumerable und Sie sind typecasting es zu Movie. Daher schlägt sie fehl. Überprüfen Sie die Syntax der Where-Erweiterungsfunktion, um sich selbst ein Bild zu machen. Wenn Sie also sicher sind, dass nur ein Movie-Objekt zurückgegeben wird, schlage ich vor, dass Sie First() wie folgt verwenden.

public ActionResult Details(int id) 
{ 
    var moviedetail = _entities.MovieSet.Where(mvid => mvid.Id == id).First(); 
    return View(moviedetail); 
}

0voto

dotcoder Punkte 2738

Ich denke, Sie erhalten eine Auflistung aus dem Lambda-Ausdruck. Und Ihre Ansicht erwartet ein einzelnes Filmobjekt. Da es eine Unstimmigkeit gibt, wird der Fehler ausgelöst. Verwenden Sie Single() anstelle von Where() oder First().

var moviedetail = (Movie)_entities.MovieSet.Single(mvid => mvid.Id == id);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X