大约是这样
员工类
public class Person { public string Name { get; set; } public int Age { get; set; } /* other attribe */ }
部门类
public class Dept { public List<Person> Employee { get; set; } public List<Dept> DivDept { get; set; } }
调用
static void Main(string[] args) { List<Person> result = new List<Person>(); List<Dept> all = new List<Dept>(); all.ForEach(dept => GetAgeOver(dept, result)); } static void GetAgeOver(Dept dept, List<Person> result) { if (dept.Employee != null) { dept.Employee.ForEach(em => { if (em.Age > 25) { result.Add(em); } }); } dept.DivDept.ForEach(subDept => GetAgeOver(subDept, result)); }
谢谢哦!了解了!
= =难道你的员工表不是单独的表吗?
这个跟递归有神马关系的,直接sql查询出来不行吗?
楼上是对的
楼上是对的
上面的回答可以解决你的问题。不过需要注意的是要看你数据是怎么存储的,一般使用数据库的话,是不会直接存个树状结构进去的,所以当然也不必考虑什么部门中还有部门的问题了,当然,从数据库中取回数据以后,可能还是需要还原回树。
用递归查数据库效率非常低,数据量小的时候速度还可以,数据量大的时候数据库就成了瓶颈
建议先递归查询出所有部门ID,然后根据数据量大小,分组查询,最后汇总结果。
谢谢。这个是面试的题目,没有要求那么详细。不过你说的确实不错