我有两张表如下
表人
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到实体查询吗?
答案 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.
}
}