编写Lambda Expression时在MVC Proj中出错

时间:2010-05-05 12:21:36

标签: c# asp.net asp.net-mvc linq lambda

我正在创建一个示例电影(MVC)应用程序。我在查看和创建新记录时表现不错,但是当我编写代码以获取特定记录的详细信息时,我遇到了以下错误:

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

这是我为获取详细信息而编写的代码

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

任何人都可以告诉我哪里出错了?在哪里?

谢谢。

3 个答案:

答案 0 :(得分:1)

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

Where用于返回列表,添加ToList()并且您将拥有与您的ID匹配的所有项目,如果您确定只有一个,请使用First,它将返回匹配的第一个项目,如果没有匹配,FirstOrDefault将返回匹配的第一个项目或您的默认对象(可能为null)。

答案 1 :(得分:1)

您的代码中的问题是Where函数返回IEnumerable并将其类型转换为Movie。因此它失败了。检查Where扩展功能的语法,以便自己查看。因此,如果您确定只返回一个Movie对象,我建议您像这样使用First()。

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

答案 2 :(得分:0)

我想,你是从lambda表达式中获取一个集合。而你的观点是期待一个电影对象。由于存在不匹配,因此会抛出错误。只需使用Single()而不是Where()或使用First()。

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