У меня есть класс модели, который выглядит примерно так:
public class Employee
{
public int Id {get;set;}
public int ParentId {get;set;}
public string Name{get;set;}
public string Designation {get;set;}
public List<Employee> Reportees {get;set;}
}
, используя который я смоделировал список демонстрационного дерева с данными:
var employees = new List<Employee>
{
new Employee
{
Id = 1,
ParentId = 0,
Name = "A",
Designation = "CEO",
Reportees = new List<Employee>
{
new Employee { Id = 2, ParentId = 1,Name = "B",Designation = "Manager",Reportees = new List<Employee>
{
new Employee { Id = 4, ParentId = 2, Name = "D", Designation = "Lead", Reportees = new List<Employee>
{
new Employee { Id = 6, ParentId = 4, Name = "F", Designation = "Developer", Reportees = new List<Employee>() },
new Employee { Id = 7, ParentId = 4, Name = "G", Designation = "Developer", Reportees = new List<Employee>() }
}},
new Employee { Id = 3, ParentId = 1,Name = "C",Designation = "Manager",Reportees = new List<Employee>
{
new Employee { Id = 5, ParentId = 3, Name = "E", Designation = "Lead", Reportees = new List<Employee>
{
new Employee { Id = 8, ParentId = 5, Name = "H", Designation = "Developer", Reportees = new List<Employee>() }
}}
}}
}}
}
}
};
Мне нужно отфильтровать приведенный выше список чтобы показать даже родительский объект, если дочерний объект удовлетворяет условию фильтра. Также здесь есть загвоздка, если это родительский элемент, который удовлетворяет условию, а дочерние элементы - нет, они не указаны.
Доступны ли какие-либо расширения или можно использовать LINQ для этого?
Чтобы проясните, что это ожидаемый отфильтрованный список в случае, если критериями поиска фильтра являются идентификаторы 6 и 7 :
var employees = new List<Employee>
{
new Employee {Id = 1, ParentId = 0, Name = "A",Designation = "CEO", Reportees = new List<Employee>
{
new Employee {Id = 2, ParentId = 1, Name = "B",Designation = "Manager", Reportees = new List<Employee>
{
new Employee {Id = 4, ParentId = 2, Name = "D", Designation = "Lead", Reportees = new List<Employee>
{
new Employee {Id = 6, ParentId = 4, Name = "F", Designation = "Developer", Reportees = new List<Employee>() },
new Employee {Id = 7, ParentId = 4, Name = "G", Designation = "Developer", Reportees = new List<Employee>() }
}}
}}
}}
};
и если идентификатор для фильтрации 6 :
new List<Employee> employees
{
new Employee{Id = 1,ParentId = 0,Name = "A",Designation = "CEO",Reportees = new List<Employee>{
new Employee{Id = 2,ParentId = 1,Name = "B",Designation = "Manager",Reportees = new List<Employee>{
new Employee{Id = 4, ParentId = 2, Name = "D", Designation = "Lead", Reportees = new List<Employee>
{
new Employee{Id = 6, ParentId = 4, Name = "F", Designation = "Developer", Reportees = new List<Employee> () }
}
}
}
};
и если идентификатор для фильтрации равен 2 :
new List<Employee> employees
{
new Employee{Id = 1,ParentId = 0,Name = "A",Designation = "CEO",Reportees = new List<Employee>{
new Employee{Id = 2,ParentId = 1,Name = "B",Designation = "Manager",Reportees = new List<Employee>()}
}
};C#