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()”错了......但是什么是正确的?
答案 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”。 对不起忘了告诉你; - )