Обновить несколько значений в список объектов в C # - PullRequest
2 голосов
/ 04 ноября 2019

Как обновить несколько свойств объекта в списке?

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 может содержать повторяющиеся идентификаторы

Ответы [ 4 ]

8 голосов
/ 04 ноября 2019

Вам нужно запросить свой список только один раз

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;
    }
}
0 голосов
/ 04 ноября 2019

Нет явного поиска, нет вложенных циклов: (если 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;
}

Добавьте .OfType (), если вам нужно.

0 голосов
/ 04 ноября 2019

Замените 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;
    }
}
0 голосов
/ 04 ноября 2019

После много попыток. Похоже, это сработает:

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;
    }
} 

Что вы, ребята, чувствуете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...