如何编辑对象深处的属性

时间:2015-02-04 16:56:55

标签: c# linq

假设有一个人物对象有很多ICollection 和ObjectType2有Icollection

因此,要编辑属性,理论上您可以使用forloops进行深入搜索。 但是什么是语法上更好的更好的方法。

例如,要编辑名为PP的属性,可以执行以下操作:

foreach (var item in PersonData)
            {
                foreach (var item2 in item.Staffs)
                {
                    foreach (var item3 in item2.Employees)
                    {
                        foreach (var item4 in item3.EmployeePositions)
                        {
                            item4.PP = "test";
                        }
                    }
                }
            }

但我正在寻找一些非常好的东西,例如: 无论是通过linq还是其他方法。

2 个答案:

答案 0 :(得分:6)

var positions = PersonData
                .SelectMany(p => p.Staffs)
                .SelectMany(s => s.Employees)
                .SelectMany(e => e.EmployeePositions);
foreach (var position in positions)
{
   position.PP = "test";
}

这相当于嵌套循环。

答案 1 :(得分:3)

如果这些对象存储在数据库中,您几乎肯定会对EmployeePositions表进行查询,可能会通过加入EmployeesStaff表来对其进行过滤。

如果你真的需要访问EmployeePositions的所有实例,你可能需要一个包含它们的单独集合,而不是不断枚举其他对象的属性来找到它们。