在C#中将多个值更新为对象列表

如何更新列表中对象的多个属性?

foreach(emp e in emps){
    list1.Where(x => x.ID == e.ID && x.Salary < 5000).FirstOrDefault().Level = B;
    list1.Where(x => x.ID == e.ID && x.Salary < 5000).FirstOrDefault().Hike = e.Hike;
    list1.Where(x => x.ID == e.ID && x.Salary < 5000).FirstOrDefault().Salary = (e.Hike + 100)*e.Salary/100 ;
}    

我不想为每个字段使用多个内联查询。而且它应该更新相同的单个对象。 注意:e.ID不是唯一键。 list1可以包含重复的ID

caozhiting 回答:在C#中将多个值更新为对象列表

您只需查询一次列表

foreach (emp e in emps)
{
    var item = list.FirstOrDefault(x => x.ID == e.empID && x.Salary > 5000);
    if (item != null)
    {
        item.Level = B;
        item.Hike = e.Hike;
        item.Salary = (e.Hike + 100) * e.Salary / 100;
    }
}
,

尝试了很多之后。看起来这些可以工作:

foreach(emp e in emps){
    int index = list1.FindIndex(x => x.ID == e.ID && x.Salary < 5000);
    if(index != -1)
    {
        list1[index].Level = 'B';
        list1[index].Hike = e.Hike;
        list1[index].Salary = (e.Hike + 100)*e.Salary/100;
    }
} 

你们的感觉如何?

,

Foo替换为您的班级

foreach (emp e in emps)
{
    if (list.FirstOrDefault(x => x.ID == e.empID && x.Salary > 5000) is Foo f)
    {
        f.Level = B;
        f.Hike = e.Hike;
        f.Salary = (e.Hike + 100) * e.Salary / 100;
    }
}
,

没有显式搜索,没有嵌套循环:(如果ID是您的主键)

 foreach(item in list.Join(emps,x=>x.ID,e=>e.empID,(l,e)=> (l,e)).Where(x => x.l.Salary > 5000))
 {
    item.l.Level = B;
    item.l.Hike = item.e.Hike;
    item.l.Salary = (item.e.Hike + 100) * item.e.Salary / 100;
}

如果需要,可以附加.O​​fType()。

本文链接:https://www.f2er.com/3166810.html

大家都在问