0

我有两个表如下

表人

  Id   Name
   1    A
   2    B
   3    C
   4    D
   5    E

表关系层次结构

ParentId   CHildId
   2         1
   3         2
   4         3

这将形成一个树状结构

      D
      |
      C
      |
      B
      |
      A

ParentId 和 ChildId 是 Person 表的 Id 列的外键

让我们假设 EF 实体名称是表名称。我需要找到每个人的顶级家长。结果集应如下所示

 PersonId PersonName TopLevelPArentID TopLevelPArentName

任何人都可以建议任何 LINQ 或 LINQ to Entity Query 吗?

4

1 回答 1

0

我假设最高父级将 ParentId 设置为 NULL ?使用这个假设,我们可以使用递归函数遍历每个 Person。

public YourMainFunction(){
    List<Person> allPersons = entityContext.Person.ToList();
    List<KeyValuePair<Person, Person>> personAndParents = new List<KeyValuePair<Person, Person>>();
    foreach(Person p in allPersons){
        personAndParents.Add(new KeyValuePair<Person, Person>(p, GetTopParent(p)));
    }
}
//Now you have a list of each Persons Parents in a key/value pair list.

public Person GetTopParent(Person p){
    if(p.RelationHierarchy.Count(r=>r.ParentId != null) == 0){
        return p;
    }
    else{
        return GetTopParent(p.RelationHierarchy.FirstOrDefault(r=>r.ParentId != null).Person1); //This should be the parent relation, not the child relation, im not sure what you have named the relations.
    }
}
于 2013-07-17T10:04:39.867 回答