2013-10-09 48 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

發生這種情況是因爲您正在查詢,結果是任何具有Joah名字的人都會返回的集合。如果有多個結果會發生什麼?這是你可能想在這裏考慮的事情。

然而,一個簡單的方法來解決這個問題是隻取前一個

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

hmm我沒有那個方法.FirstOrDefault()。是因爲我的方法GET返回一個IEnumerable而不是IQueryable?這很容易混淆 – Max

+0

@Max - IQueryable從IEnumerable繼承,就像許多不同的類型一樣([請參閱FirstOrDefault上的MSDN文檔](http://msdn.microsoft.com/zh-cn/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

您的通話腳趾獲取(U => u.FirstName ==「約亞」)返回一個集合(所有用戶的名字Joah),你試圖將它設置爲newUser變量。

這就是發生了什麼事。

什麼將使代碼編譯爲

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

但要記住......

  1. 這只是它找到的第一個。如果您有超過1個名爲「Joah」的用戶,那麼您可能不會返回正確的用戶。
  2. 如果未找到項目,則FirstOrDefault()可能會返回null。你可以使用First()來代替,它不返回null,但是當沒有發現任何東西時(即沒有名字爲「Joah」的用戶)拋出異常。
相關問題