使用LinQ C#在嵌套泛型集合中设置或赋值

时间:2016-05-06 09:45:54

标签: c# linq generic-collections

我在IEnumerable<Employee> SelectedEmployees集合中的Employees类列表中列出了SelectedEmployees。我再次嵌套通用集合,如下面的代码。如何仅为使用带有C#的LinQ的所选员工将IsPhoneAssigned值设置为true

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

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

2 个答案:

答案 0 :(得分:1)

Linq用于查询,而不是用于分配。因此,您的实现可以分为两部分:

  1. Linq选择您的员工
  2. / Foreach循环将属性值分配为true
  3. 这样的事情:

    var query = SelectedEmployees.Where(x => myCondition(x));
    foreach (var q in query)
        foreach (var p in q.Phones)
            p.IsPhoneAssigned = true;
    

答案 1 :(得分:0)

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();

在这里创建anonymouse函数,它会更改对象的属性并使用changed属性返回它。但实际上我认为1选项更具可读性和可维护性。