Как я могу обновить ObservableCollection по его идентификатору с помощью C #? - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть ObservableCollection <> пользовательских объектов, подобных этому

public class Employee()
{
    public int id { get; set; }
    public decimal salary { get; set; }
}

ObservableCollection<Employee> employeeCollection = new ObservableCollection<Employee>()
{
    new Employee() { id = 1, salary = 1000.00 },
    new Employee() { id = 2, salary = 1500.00 },
    new Employee() { id = 3, salary = 2000.00 },
    new Employee() { id = 4, salary = 2500.00 },
    new Employee() { id = 5, salary = 3000.00 }
};

id является уникальным свойством в этой коллекции. Как я могу обновить зарплату коллекции на основе идентификатора и получить всю коллекцию наиболее эффективным способом?

Т.е.: если я обновлю зарплату до 5000,00 сотрудника, чей идентификатор равен 3, результат должен быть таким:

employeeCollection = new ObservableCollection<Employee>()
{
    new Employee() { id = 1, salary = 1000.00 },
    new Employee() { id = 2, salary = 1500.00 },
    new Employee() { id = 3, salary = 5000.00 },
    new Employee() { id = 4, salary = 2500.00 },
    new Employee() { id = 5, salary = 3000.00 }
}

Мне нужно получить всю коллекцию с обновленными значениями.

1 Ответ

0 голосов
/ 13 ноября 2018
var emp = employeeCollection.FirstOrDefault(x => x.Id == 3)
if(emp != null) // might not exist
   emp.salary = 5000

Если вам нужно работать с набором записей

var results = employeeCollection.Where(x => x.Id == 3)

foreach(var emp in results)
   emp.salary = 5000

или

employeeCollection.Where(x => x.Id == 3)
                  .ToList()
                  .ForEach(x => x.salary = 5000);

Лично мне не нравится второй подход ч


Дополнительные ресурсы

Enumerable.FirstOrDefault Method

Возвращает первый элемент последовательности или значение по умолчанию, если элемент не найден.

...