2012-08-29 40 views
0

我有一個SelectList,看起來像。 。 。如何從SelectListItem返回SelectListItem中給定相應的「Value」值的「Text」?

new SelectList(new[] 
    { 
     new { Value = "1", Text = "AK" }, 
     new { Value = "2", Text = "AL" }, 
     new { Value = "3", Text = "AR" }, 
     new { Value = "4", Text = "AZ" }, 
     etc. . . 

給出一個int我需要能夠選擇相應的Value,所以我可以返回相關Text。所以如果我有int 3,我想最終返回字符串「AR」 - 我該怎麼做?

我似乎不明白SelectLists是如何工作的,我一直是這樣的:

var stringValue = mySelectList.Where(m => m.Value == myInt).Text; 

- 這並不是一對夫婦的原因有:

  • 。文本是不是我可以放在請求的末尾,因爲它無法解決
  • m.Value - myInt告訴我I cannot convert the source type 'int' to target type 'string',如果我將int更改爲一個字符串,我得到的錯誤:cannot convert expression type 'string' to return type 'bool'

我覺得我在這裏過於複雜。我哪裏做錯了?

回答

1

你可能需要的東西是這樣的:

var stringValue = mySelectList.Where(m => m.Value == myInt.ToString()) 
           .First() 
           .Text; 
  • Where方法不返回SelectListItem,它返回的查詢。您需要強制執行查詢,並通過使用First()方法獲取第一個結果。
  • 您正在使用=(分配值)而不是==(比較兩個值)。
+0

...或者只是用First取代Where。 –

+1

只要小心First()。如果沒有找到行,它會拋出異常。您應該考慮使用FirstOrDefault(),並在此LINK查詢後檢查它是否爲空。 - 編輯 - 或者簡單地把這個包裹在試試看... – Pluc

+0

@Pluc是的,絕對。 –

1

做到這一點;

mySelectList.First(m => m.Value == myInt.ToString()).Text 
+1

這仍然使用'='而不是'=='。 –

+0

好點,編輯 – saj

2

你可以使用這樣的事情太

var stringValue = mySelectList.Find(match => match.Value == myInt.ToString()).Text; 

由於查找返回列表中找到的第一個匹配。

你的代碼不能正常工作,因爲你的另一件事鍵入只是一個「=」你的比較,它應該像「==」 您:

mySelectList.Where(m => m.Value = myInt).Text 

喜歡它shiould是:

mySelectList.Where(m => m.Value == myInt).Text 
0
var lst = mySelectList.Where(o=> o.Value ==myInt.ToString()).Select(o=> o.Text).First(); 
相關問題