代码之家  ›  专栏  ›  技术社区  ›  Shrewdroid

编写Lambda表达式时在MVC Proj中获取错误

  •  3
  • Shrewdroid  · 技术社区  · 16 年前

    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 回复  |  直到 13 年前
        1
  •  1
  •   dotcoder    16 年前

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

    public ActionResult Details(int id) 
    { 
        var moviedetail = _entities.MovieSet.Where(mvid => mvid.Id == id).First(); 
        return View(moviedetail); 
    } 
    
        2
  •  1
  •   moi_meme    16 年前

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

    Where 用于返回一个列表,add ToList(),您将拥有与您的id匹配的所有项,如果您确定只有一个,请使用 First ,它将返回第一个匹配的项, FirstOrDefault 将返回第一个匹配的对象,如果不匹配,则返回默认对象(可能为null)。

        3
  •  0
  •   dotcoder    16 年前

    我想,你从lambda表达式中得到了一个集合。您的视图需要一个电影对象。因为存在不匹配,所以抛出错误。只需使用Single()而不是Where()或使用First()。

    var moviedetail=(电影)\ u entities.MovieSet.Single(mvid=>mvid.Id==Id);

    推荐文章