2012-09-20 409 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;