通过在c#中搜索来更新对象的属性

时间:2011-07-13 15:58:38

标签: 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将选择列表中属性眼睛颜色为蓝色且城市为多伦多的所有对象。它应该返回对象一和三。然后我应该能够更新第一个和第三个对象的warnings属性以增加1。

我怎样才能做到这一点? 提前谢谢。

3 个答案:

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

答案 1 :(得分:4)

这个怎么样

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

答案 2 :(得分:1)

假设您有IEnumerable<YourType>(数组,列表等),您将执行此操作:

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