在Entity Framework Query中查找TOP LEVEL父级

时间:2013-07-17 09:48:05

标签: c# linq entity-framework-4

我有两张表如下

表人

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

表RelationHierarchy

ParentId   CHildId
   2         1
   3         2
   4         3

这将形成类似树的结构

      D
      |
      C
      |
      B
      |
      A

ParentId和ChildId是Person Table

的Id列的外键

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

 PersonId PersonName TopLevelPArentID TopLevelPArentName

任何人都可以建议任何LINQ或LINQ到实体查询吗?

1 个答案:

答案 0 :(得分: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.
    }
}