2008-12-02 61 views
1

我有一個SelectList,我首先檢查選定的值!= null,然後想要使用此選定值在過濾器的where子句中。像這樣:無法將類型爲WhereListIterator <system.web.Mvc.ListItem>的對象轉換爲鍵入system.web.mvc.listitem

if(searchBag.Qualities.SelectedValue != null){ 
    ListItem selected = (ListItem)searchBag.Qualities.SelectedValue; 
} 

我在一個單獨的無用線中進行了演員指出問題。 這給了我

無法轉換類型的對象 'WhereListIterator`1 [System.Web.Mvc.ListItem]' 爲類型 'System.Web.Mvc.ListItem'。

Weuh?

- 編輯 -
這確實是因爲多選作了。 這是因爲在創建時,我將所選值設置爲Item.Where(i => i.someCriterea),並且我忘記了將.FirstOrDefault()放在最後。結束了多個答案的可能性。 由於它是一個IEnumerable,它是一個懶惰的列表,因此我猜想是WhereListIterator。 我通過簡單地把FirstOrDefault放在最後來解決它。

回答

0

它已經解釋,但在這裏是爲如何讓你在找什麼其他建議:

if(searchBag.Qualities.SelectedValue != null){ 
    ListItem selected = (ListItem)searchBag.Qualities.SelectedValue.FirstOrDefault(); 
} 
0

我假設SelectList可以讓你選擇多於一個項目?

So SelectedValue可能是一個列表?不是1 listitem。

它轉換爲:

WhereListIterator<ListItem> selected = (WhereListIterator<ListItem>)searchBag.Qualities.SelectedValue; 

代替 ,看看你有什麼性質存在。

0

SelectedValue不是一個ListItem,它是所選列表項的值。所以給出這個:

var selectList = new SelectList(companiesList, "Id", "Name", companiesList[3]); 

selectList.SelectedValue will equal companiesList [3] .Id。如果你想實際的列表項,你可以做這樣的事情:

ListItem selected = selectList.GetListItems().Where(x => x.Value == selectList.SelectedValue.ToString()) 

只是好奇,爲什麼你要選擇的列表項?

相關問題