无法隐式转换类型'System.Collections.Generic.IEnumerable <domain.user> </domain.user>

时间:2013-10-09 22:11:10

标签: entity-framework casting

编译时间错误: “无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'Domain.User'。 存在显式转换(您是否错过了演员?)“
User newUser = uow.UserRepository.Get(u => u.FirstName == "Joah");

如果我添加一个演员:

,我会收到运行时错误
“无法将'System.Collections.Generic.List`1 [Domain.User]'类型的对象强制转换为'Domain.User'。”
User newUser = (User)uow.UserRepository.Get(u => u.FirstName == "Joah");

如果我使用“var”,我会看到正在返回的对象,但我需要将其转换为“User”: - (

为什么会这样?

3 个答案:

答案 0 :(得分:2)

这是因为您正在查询,结果是一个集合,其中任何具有Joah名字的人都会被返回。如果有多个结果会怎样?这是你可能想在这里考虑的事情。

然而,解决这个问题的一个简单方法就是选择第一个

User newUser = uow.UserRepository.Get(u => u.FirstName == "Joah").FirstOrDefault();

答案 1 :(得分:0)

uow.UserRepository.Get(u => u.FirstName == "Joah");

这将返回List个事物(所有具有该名字的人)。

如果您只想要第一个,请使用

User newUser = uow.UserRepository.Get(u => u.FirstName == "Joah").FirstOrDefault();

答案 2 :(得分:0)

你的来电获取(u =&gt; u.FirstName ==&#34; Joah&#34;)正在返回一个集合(所有名为Joah的用户)并且您正在尝试将其设置为newUser变量。

这就是发生了什么。

编译代码的原因是

User newUser = uow.UserRepository.Get(u => u.FirstName == "Joah").FirstOrDefault();

但请记住......

  1. 这只是它找到的第一个。如果您有超过1个名为&#34的用户; Joah&#34;然后你可能不会返回合适的用户。
  2. 如果没有找到任何项目,
  3. FirstOrDefault()可能会返回null。您可以使用First()代替,它不会返回null,但会在找不到任何内容时抛出异常(即没有名字的用户&#34; Joah&#34;)