2011-07-13 75 views
3

我有一個數據結構如下:我有一個對象的列表,包含我想要搜索的屬性,然後當我找到與我的搜索查詢匹配的所有對象時,我想要爲所有找到的對象更新另一個屬性。這裏是對象的屬性的例子:通過在c中搜索更新對象的屬性

Name: Sean Aston 
City: Toronto 
Eye Color: Blue 
Warnings: 4 

Name: Cole Anderson 
City: New York City 
Eye Color: Black 
Warnings: 1 

Name: Polly Smith 
City: Toronto 
Eye Color: Blue 
Warnings: 3 

我的搜索woluld可以選擇其屬性眼睛的顏色是藍色和城市是多倫多列表中的所有這些對象。它應該返回我的對象​​一和三。然後,我應該能夠更新第一個和第三個對象的警告屬性增加1.

我該如何實現這一目標? 在此先感謝。

+0

這是否幫助? http://stackoverflow.com/questions/361921/list-manipulation-in-c-using-linq – johnny

回答

5

爲了滿足您的具體要求是這樣的:

foreach (var item in MyObjectList.Where(o => o.EyeColor == "Blue" && o.City == "Toronto")) 
{ 
    item.Warnings ++; 
} 

但我懷疑的標準完全是由用戶決定的,所以你不知道你在喜歡編譯時找什麼這個。在這種情況下:

var search = (IEnumerable<MyObject>)MyObjectList; 

if (!string.IsNullOrEmpty(txtCity.Text)) 
{ 
    search = search.Where(o => o.City == txtCity.Text); 
} 

if (!string.IsNullOrEmpty(txtEyeColor.Text)) 
{ 
    search = search.Where(o => o.EyeColor == txtEyeColor.Text); 
} 

// similar checks for name or warning level could go here 

foreach(var item in search) {item.Warnings++;} 
+0

Arg ...我回答的最後一個問題是在vb.net,所以我有vb相等運算符在那裏有一段時間:( –

+0

+1表現顧慮 –

1

假設你有一個IEnumerable<YourType>(排列,列表等),你會做這樣的:

var filtered = yourlist.Where(o => o.EyeColor == "Blue" && o.City =="Toronto") 
foreach(item in filtered) 
{ 
    item.Warnings++; 
} 
4

這個怎麼樣

People.Where(p => p.EyeColor == "blue" && p.City == "Toronto") 
     .ToList().ForEach(p => p.Warnings++); 
+0

+1這正是我寫你的帖子時加載!=) –

+0

+1不錯的一個。沒有足夠快的想到這個 –

+3

我不喜歡那裏的.ToList()調用。它造成壞習慣。我知道你需要ForEach擴展,但難以將它放在foreach()循環中嗎? –