Установить или присвоить значение в вложенной универсальной коллекции с помощью 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 для запросов, а не для назначения. Таким образом, ваша реализация может быть разделена на две части:
- Linq, чтобы выбрать вашего сотрудника
- Цикл /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 вариант является более читабельным и понятным.