我是新来的linq,我试图找到一种方式来返回父母和一个List(子女)和所有这些孩子,对于一个给定的父母。我有一个地点表的字段为LocationID
,ParentLocationID
,LocationName
。对这些数据的样本可能看起来像这样:递归linq得到无限的孩子
ABC
--ABC1
--ABC2
----DEF1
----DEF2
----DEF3
--ABC3
----DEF4
------GHI1
------GHI2
----DEF5
--ABC4
...
鉴于数据,如果选择父“ABC”,我想回到所有行,因为所有的孩子都在它之下。但是,如果我选择父ABC3,它将返回DEF4,GHI1,GHI2,DEF5。
我看着这些所谓的问题,但我仍然困惑于如何创造这个声明(S):
Find all descendants in self-referencing (parent-child) hierarchical tree
LINQ to SQL - Self Join Child to Parent (Same Table)
这是我做过尝试,但我得到的错误:
public ActionResult Index()
{
var loc = GetChild(346);
return View(loc);
}
public IEnumerable<Location> GetChild(int id)
{
DBEntities db = new DBEntities();
var locations = db.Locations.Where(x => x.ParentLocationID == id || x.LocationID == id).Union(
db.Locations.Where(x => x.ParentLocationID == id).SelectMany(y => GetChild(y.LocationID)));
return locations;
}
而且Location
类:
public class Location
{
public Location();
public virtual ICollection<SimSystem> SimSystems { get; set; }
public virtual ICollection<LocationAddress> LocationAddresses { get; set; }
public virtual LocationType LocationType { get; set; }
public virtual ICollection<CustomerUser> CustomerUsers { get; set; }
public virtual ICollection<AppUserLocation> AppUserLocations { get; set; }
public int LocationTypeID { get; set; }
public DateTime? InstallDate { get; set; }
public string AltPhone { get; set; }
public string OfficePhone { get; set; }
public int? PrimaryAddressID { get; set; }
public int? ParentLocationID { get; set; }
public string LocationName { get; set; }
public string LocationName2 { get; set; }
public int LocationID { get; set; }
public virtual Address Address { get; set; }
}
错误是:
LINQ实体无法识别的方法和这种方法不能被翻译成表达商店。
你会得到什么错误? –
我刚刚更新了问题,对不起,应该先把它放在那里。 – Robert
我的建议是加载父节点,然后调用递归CTE加载其他记录,并让EF做它的魔术实体修复 - 或者相反,调用递归CTE,它将加载所有记录,然后获得父母(以及所有的孩子都应该在场)。 –