如何使用Linq技术遍历SelectListItem数组?

时间:2010-08-16 16:15:31

标签: linq

Linq - 新手问题:

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”,“Text”和“Value”属性。 “Selected”仅在第一个设置为“true”的元素中。 第二个元素在“Text”和“Value”中包含“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;
  }
}

当然是“.First()”错了......但是什么是正确的?

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

请注意,如果没有一个项目的值为5,则会抛出异常。

答案 2 :(得分: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...",
                  });

答案 3 :(得分: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;
}

因为我还想为第一个元素设置“Selected”为“false”。 对不起忘了告诉你; - )