【问题标题】:Getting error in MVC Proj while writing Lambda Expression编写 Lambda 表达式时在 MVC Proj 中出错
【发布时间】:2011-02-15 21:58:51
【问题描述】:

我正在创建一个示例电影 (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);
}

任何人都可以告诉我哪里出了问题吗??

谢谢。

【问题讨论】:

  • Where 返回一个在执行 ToList() 或类似操作之前不会执行的查询,您可以简单地在末尾添加 .First() ...

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


【解决方案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); 
} 

【讨论】:

  • 100% 完美答案!谢谢哥们,这正是发生的事情......我按照你所说的进行了尝试,现在我的代码运行顺利......非常感谢您的回答!保重
【解决方案2】:

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

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

【讨论】:

  • 或者 Single(...) 如果你知道只有一个。
  • 嘿伙计,感谢您的帮助,但我已经尝试过您上面提到的解决方案,我收到了这条消息(LINQ to Entities 不支持方法'Single'。考虑使用方法'First ' 代替。)这就是我使用 WHERE 属性的原因任何线索???
【解决方案3】:

我认为,您正在从 lambda 表达式中获取一个集合。而且您的视图需要一个电影对象。由于存在不匹配,因此会引发错误。只需使用 Single() 而不是 Where() 或使用 First()。

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

【讨论】:

  • 嘿伙计,感谢您的回答,但第一个或单个属性将返回我第一个或默认的单个对象。在哪里我想要与 id 匹配的对象,因此是 where 子句......我可以尝试的任何其他线索?谢谢
猜你喜欢
  • 2023-03-29
  • 1970-01-01
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多