使用 LINQ 组合 parent 列表和多个 child 列表

Combine parent list & multiple child list using LINQ

尝试组合多个 child 列表集合并附加到单个 parent 列表,所有 child 都有一个与 parent 相同的 ID编号.

List<Department> DepartmentList
List<Student> StudentList
List<Professor> ProfessorList

class ParentVM
{
    public List<Department> DepartmentList;
}

class Department
{
    public int Id { get; set; }
    Public List<Student> StudentList
    Public List<Professor> ProfessorList
}

class student
{
    public int Id { get; set; }
    Public int DepartmentId { get; set; }
    public int StudentName { get; set; }
}

class professor
{
    public int Id { get; set; }
    Public int DepartmentId { get; set; }
    public int ProfessorName { get; set; }
}

我有以下查询要将 parent 附加到 child:

 var departmentQuery =
    from dpt in DepartmentList
    join stu in StudentList on dpt.Id equals stu.DepartmentId
    group StudentList by DepartmentId;

foreach(var grp in departmentQuery) {
    grp.Key.StudentList = grp.ToList();
}

使用上面的查询我将不得不再次为 ProfessorList 重复上面的查询并再次重复 foreach 循环以将教授列表附加到部门集合,但是我如何编写查询以将所有 childrens 附加到它的 parents 使用一个查询和一个 foreach 循环。

我假设 Parent object 有一个 Child object 的列表并且 Child object 有一个 ParentId 属性对应于parents的Id.

class Parent
{
    public int Id { get; set; }
    public List<Child> Children { get; set; }
}

class Child
{
    public int Id { get; set; }
    public int ParentId { get; set; }
}

从多个列表中分配所有相应的 children 可以通过以下方式完成:

parentList = parentList.Select(
    parent => new Parent 
    {
        Id = parent.Id, 
        Children = childList1.Union(childList2.Union(childList3))
            .Where(child => child.ParentId == parent.Id)
            .ToList()
    }
).ToList();

简单遍历每个 Department 对象并分配其子列表:

foreach (var dept in DepartmentList) {
    dept.StudentList = StudentList.Where(s => s.DepartmentId == dept.Id).ToList();
    dept.ProfessorList = ProfessorList.Where(p => p.DepartmentId == dept.Id).ToList();
}