2012-09-20 408 views
2

我有2个包含不同类型的列表。一个是string[],另一个是List<SelectListItem>C#Linq List比较和更新列表

SelectListItem(它在MVC):

public string Text {get;set;} 
public string Value {get;set;} 
public bool Selected {get;set;} 

string[]只是包含一些文本值。

我想要做的是,让无论是在string[],然后设置"Selected = true"不管什么Value比赛,并"Selected = false"什么犯规的比赛。

因此,可以说我的string[]是:

Test1 
Test2 
Test3 

而且我List<SelectListItem>是:

new SelectListItem { Text = "Testing", Value = "Test1", Selected = false }, 
new SelectListItem { Text = "Testing", Value = "Test4", Selected = true } 

在上面List<SelectListItem>,我有一个匹配。所以我想要做的,是集选择=真为特定条目,这样我就结了:

new SelectListItem { Text = "Testing", Value = "Test1", Selected = true }, 
new SelectListItem { Text = "Testing", Value = "Test4", Selected = false } 

我将如何实现这一目标?

+0

在上述情况下,如果文本4有什么是真正的,你想让它设置为false或离开选择未改变? –

+0

将其设置为false。对不起,我应该在我的问题中说明这一点。我会更新它。 – jzm

回答

2
foreach(var i in selectListItemList) 
    i.Selected = stringArray.Contains(i.Value); 

或使用List.ForEach

selectListItemList.ForEach(i => i.Selected = stringArray.Contains(i.Value)); 
+0

很好,这将设置为列表中的值,但也会将其他值设置为false,即使其中存在true也是如此。 –

+0

@NikhilAgrawal“我想要做的是,获取字符串[]中的任何内容,然后将”Selected = true“设置为任何值匹配,并将”Selected = false“设置为不匹配的内容。所以我这样做了。否则,你的答案是可以选择的答案。 –

+0

谢谢,这是完美的 – jzm

1

如何

list.ForEach(x => x.Selected = stringarray.Contains(x.Value)) 
0
var items = SelectListItems.Where(p=>stringArray.Contains(p));; 
foreach(var item in items) 
    item.Selected=true;