1
编译时错误:“无法将类型 '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”,我会看到返回的对象,但我需要将其转换为“用户”:-(

为什么会发生这种情况?

4

3 回答 3

2

发生这种情况是因为您正在查询,结果是一个集合,其中任何名字为 Joah 的人都会被返回。如果有多个结果会发生什么?这是您可能要在这里考虑的事情。

但是,解决此问题的一种简单方法是仅采用第一个

User newUser = uow.UserRepository.Get(u => u.FirstName == "Joah").FirstOrDefault();
于 2013-10-09T22:15:10.447 回答
0

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

这是返回List的东西(所有有那个名字的人)。

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

User newUser = uow.UserRepository.Get(u => u.FirstName == "Joah").FirstOrDefault();
于 2013-10-09T22:16:49.177 回答
0

您的调用 toe Get(u => u.FirstName == "Joah") 正在返回一个集合(所有名为 Joah 的用户),并且您正试图将其设置为 newUser 变量。

所以这就是正在发生的事情。

什么会使代码编译是

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

但要记住...

  1. 这只是它找到的第一个。如果您有超过 1 个名为“Joah”的用户,那么您可能不会返回正确的用户。
  2. 如果未找到任何项目,FirstOrDefault() 可能会返回 null。您可以改用 First(),它不返回 null,但在找不到任何内容时会抛出异常(即没有名字为“Joah”的用户)
于 2013-10-09T22:17:07.693 回答