1

私はSQLデータを持っています

ID Name ParentID
1 BillGates 1
2 Paul Allen 1
3 Progam manager 2
4 Some Programmer 3

....

List<Employee>これを従業員の場所に再帰するにはどうすればよいですか

public  class Employee
{
    public int ID { get; set; }
    public string Name { get; set; }
    public List<Employee> Children { get; set; }
}
4

2 に答える 2

1

従業員の下にあるすべての従業員を再帰的に取得するには、次の関数を使用できます。

    public IEnumerable<T> GetDescendents<T>(T parent, Func<T, IEnumerable<T>> childSelector)
    {
        yield return parent;

        foreach (var child in childSelector(parent))
        {
            foreach (var grandChild in GetDescendents(child, childSelector))
            {
                yield return grandChild;
            }
        }
    }

使用例:

var allChildEmployees = GetDescendents(employee, e => e.Children);
于 2013-03-14T22:23:28.037 に答える
0

次の辞書を保持する必要がありますEmployee

Dictionary<int, Employee> employees;

public class Employee
{
    public int ID { get; set; }
    public string Name { get; set; }
    public List<int> ChildrenIDs { get; set; }
    public List<Employee> Children { get; set; }
}

最初に、従業員を直接読み、親を読みますID

それらがすべて読み取られたら、反復して ID をEmployees 参照に置き換えます。

foreach (var employee in employees)
{
    foreach (var id in employee.ChildrenIDs)
    {
        employee.Children.Add(employees[id]);
    }
}
于 2013-03-14T22:18:20.543 に答える