2013-10-09 6 views
1
Compile time error: "Cannot implicitly convert type 'System.Collections.Generic.IEnumerable' to 'Domain.User'. An explicit conversion exists (are you missing a cast?)"
User newUser = uow.UserRepository.Get(u => u.FirstName == "Joah"); 

Тогда я получаю сообщение об ошибке выполнения, если добавить ролях:Не может неявно преобразовать тип «System.Collections.Generic.IEnumerable <Domain.User>

"Unable to cast object of type 'System.Collections.Generic.List`1[Domain.User]' to type 'Domain.User'."
User newUser = (User)uow.UserRepository.Get(u => u.FirstName == "Joah"); 

Если я использую„вар“ Я вижу возвращаемый объект, но мне нужно указать его как «Пользователь» :-(

Почему это происходит?

ответ

2

Это происходит потому, что вы запрашиваете, а результат - это набор, в который возвращается тот, кто имеет имя Джоа. Что произойдет, если есть несколько результатов? Это то, что вы можете рассмотреть здесь.

Однако простой способ исправить это просто взять первый один

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

hmm У меня нет такого метода .FirstOrDefault(). Это потому, что мой метод GET возвращает IEnumerable, а не IQueryable? это настолько запутанно – Max

+0

@Max - IQueryable наследует от IEnumerable так же, как это делает много разных типов ([См. здесь для документа MSDN в FirstOrDefault] (http://msdn.microsoft.com/en-us/library/bb340482.aspx) 'FirstOrDefault' должен быть доступен. –

+0

@Max вы используете System.Linq? –

0

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

это возвращает List вещей (все человек с этим именем).

, если вы просто хотите первый один, используйте

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

Ваш вызов схождения Get (и => u.FirstName == «Иоаха») возвращает коллекцию (все пользователи с первым именем Joah), и вы пытаетесь установить это на переменную newUser.

Так вот что происходит.

Что будет сделать код компилируемому

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

Но помните ...

  1. Это только первый находит. Если у вас более одного пользователя с именем «Joah», вы можете не возвращать нужного пользователя.
  2. FirstOrDefault() может вернуть значение null, если элемент не был найден. Вместо этого вы можете использовать First(), который не возвращает null, но генерирует исключение, если ничего не найдено (например, нет пользователя с именем «Joah»)
Смежные вопросы

 Смежные вопросы