Установить или присвоить значение в вложенной универсальной коллекции с помощью LinQ C#

У меня есть список SelectedEmployees из списка сотрудников класса в IEnumerable<Employee> SelectedEmployees коллекция. Снова я вложил общую коллекцию, как показано ниже. Как я могу установить IsPhoneAssigned значение для true только для выбранных сотрудников, использующих LinQ с C#

 public class Employee
    {
       IList<PhoneProperty> Phones {get; set;}
    }

public class PhoneProperty
    {
        public bool IsPhoneAssigned { get; set; }
    }

2 ответа

Linq для запросов, а не для назначения. Таким образом, ваша реализация может быть разделена на две части:

  1. Linq, чтобы выбрать вашего сотрудника
  2. Цикл /Foreach для назначения значения свойства в true

Что-то вроде этого:

var query = SelectedEmployees.Where(x => myCondition(x));
foreach (var q in query)
    foreach (var p in q.Phones)
        p.IsPhoneAssigned = true;
var employeesList; // this is your list from context
foreach(var emp in employeesList) // iterate and change all phones 
{
    foreach(var ph in emp.Phones)
        ph.IsPhoneAssigned = true;
}
_context.SubmitChanges(); // save changes to context

Я нахожу другой элегантный способ решить вашу проблему:

var changedCollection =  _context.SelectedEmployees.Select(x => 
    {
       x.Phones.Select(y => 
                      { 
                         y.IsPhoneAssigned = true;
                         return y;
                      })
    }).ToList();

_context.SubmitChanges();

Здесь вы создаете анонимную функцию, которая изменяет свойство вашего объекта и возвращает его с измененным свойством. Но на самом деле я думаю, что 1 вариант является более читабельным и понятным.

Другие вопросы по тегам