2010-05-05 4 views
3

Je crée un exemple d'application de film (MVC). Je recevais très bien avec Affichage et création d'un nouveau record, mais quand je l'ai écrit le code pour obtenir les détails d'un enregistrement particulier j'ai rencontré l'erreur suivante:Obtenir une erreur dans MVC Proj tout en écrivant Lambda Expression

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

est le code ici je l'ai écrit pour obtenir les détails Est-ce que n'importe quel corps peut me dire ce qui va mal et où??

merci.

+0

Où retourne une requête qui n'est pas exécutée jusqu'à ce que vous faites un ToList() ou quelque chose comme ça, vous pouvez simplement ajouter .Premier() à la fin ... –

Répondre

1

Le problème dans votre code est la fonction Où vous renvoie IEnumerable et vous le typecasting à Movie. Par conséquent, il échoue. Vérifiez la syntaxe de la fonction d'extension Where à voir par vous-même. Donc, si vous êtes sûr que vous ne recevrez qu'un seul objet Movie, je vous suggère d'utiliser First() comme ceci.

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

100% réponse parfaite! merci mon pote, c'est exactement ce qui se passait ... et j'ai essayé comme vous l'avez dit et maintenant mon code fonctionne bien ... merci beaucoup pour la réponse !! prendre soin – Shrewdroid

1

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

Where est utilisé pour retourner une liste, ajoutez ToList() et vous aurez tous les éléments correspondant à votre identifiant, si votre sûr il n'y a qu'un seul, utilisez First, il retournera le premier élément qui correspond, FirstOrDefault renverra le premier qui correspond ou votre objet par défaut (probablement nul) s'il n'y a pas de correspondance.

+2

ou simple (...) si vous Je sais qu'il y en aura un et un seul. –

+0

hey buddy, Appréciez votre aide, mais j'ai déjà essayé la solution que vous avez mentionnée ci-dessus et j'ai reçu ce message (La méthode 'Single' n'est pas supportée par LINQ to Entities. Pensez à utiliser la méthode 'First' à la place.) et c'est la raison pour laquelle j'utilisais la propriété WHERE des indices ??? – Shrewdroid

0

Je pense que vous obtenez une collection de l'expression lambda. Et votre vue attend un seul objet de film. Puisqu'il y a une discordance, il lance l'erreur. Utilisez simplement Single() au lieu de Where() ou utilisez First().

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

+0

hey buddy, merci pour la réponse mais la première ou unique propriété me retournera le premier ou le seul objet par défaut. où comme je veux l'objet qui correspond à l'id et donc la clause where ... d'autres indices que je peux essayer ?? merci – Shrewdroid

Questions connexes