2010-08-16 47 views
0

的LINQ - 新手問題:如何使用Linq技術遍歷SelectListItem數組?

string[] grades = { "2", "5", "1", "7", "4", "8", "6", "0", "9", "3" }; 

List<SelectListItem> xValues = new List<SelectListItem>() 
            { new SelectListItem 
              { Selected = true, 
              Text = "Select...", 
              Value = "Select...", 
              } 
            }; 

for (int a = 0; a < 10; a++) 
{ 
     xValues.Add(new SelectListItem 
         { Selected = false, 
         Text = grades[a], 
         Value = grades[a] 
         } 
       ); 
} 

我的應用程序工作很細到這一點。 xValues現在包含11個元素。每個元素都包含一個「選定」,「文本」和「值」屬性。 「Selected」僅在第一個元素設置爲「true」。 第二個元素在「文本」和「值」中包含「2」,第三個元素包含「5」,第四個包含「1」等等......

問題: 如何設置在「Text」(和「Value」)屬性中包含「5」的xValue元素中,將「Selected」選擇爲「true」

請注意,不是第6個元素包含(必然)搜索到的「5」!

我相信它一定是類似的東西:

for (int i = 0; i < ponyValues.Count(); i++) 
{ 
    xValues[i].Selected = false; 
    if (xValues.First().Value == 「5」) 
    { 
    xValues[i].Selected = true; 
    } 
} 

當然是「首先()」錯了......但什麼是正確的?

回答

0
SelectListItem item = xValues.Single(item => item.Value == 5); 
item.Selected = true; 

請注意,如果不是正好有一個項目與5

+0

... == 5改爲... =「5」 但仍不能正常工作!?獲取此錯誤: 「名爲'item'的局部變量不能在此範圍內聲明,因爲它會給'item'賦予不同的含義,'item'在'parent或current'範圍內用於表示其他內容' AND 這不是「只是」改變「item」屬性而不是「xValues」中的元素? – user415876 2010-08-16 18:22:56

1
var five = xValues.FirstOrDefault(x=> x.Value == "5"); 
if (five != null) 
    five.Selected = true; 
+0

非常容易理解的解決方案!意思,作爲新手完美的我;-)非常感謝你! – user415876 2010-08-16 19:25:44

0
var xValues = grades.Select(g => new SelectListItem 
           { 
            Selected = (g == "5") 
            Text = g, 
            Value = g 
           }) 
        .ToList(); 

xValues.Insert(0, new SelectListItem 
        { 
         Selected = false, 
         Text = "Select...", 
         Value = "Select...", 
        }); 
+0

嗯......你有兩個選擇的項目.... – 2010-08-16 16:30:41

+0

哦,對......我已經複製並粘貼了這部分,忘了改變它。謝謝 ! – 2010-08-16 17:48:36

0

感謝所有的值,這將拋出一個異常! 最後,因爲我想還設置「選」爲「假」的第一個元素我這樣做

var isSelected = xValues.FirstOrDefault(x => x.Selected == true); 
var mustBeSelected = xValues.FirstOrDefault(x => x.Value == "5"); 
if ((isSelected != null) && (mustBeSelected != null)) 
{ 
    isSelected.Selected = false; 
    mustBeSelected.Selected = true; 
} 

。 對不起忘記告訴這個;-)