我在数据库中存储了一个组织结构图树形结构。类似于:
ID (int);
Name (String);
ParentID (int)
C#中它由一个类表示,如下:
class Employee
{
int ID,
string Name,
IList < Employee> Subs
}
我想知道如何最好地使用LINQ(我正在使用Entity Framework)从数据库中检索这些值,以填充C#对象。肯定有比获取顶层然后重复调用获取子级等更好的方法。如何最好地做到这一点?
我在数据库中存储了一个组织结构图树形结构。类似于:
ID (int);
Name (String);
ParentID (int)
C#中它由一个类表示,如下:
class Employee
{
int ID,
string Name,
IList < Employee> Subs
}
SELECT @Manager = CAST('/1/' AS hierarchyid)
SELECT @FirstChild = @Manager.GetDescendant(NULL,NULL)
即使使用LINQ,您仍需要两个查询,因为任何单个查询都会复制主要员工,从而导致创建多个(实际上是相同的)员工... 但是,当您创建对象时,可以使用linq将其隐藏一些,这就是您执行第二个查询的时候,类似于以下内容:
var v = from u in TblUsers
select new {
SupervisorName = u.DisplayName,
Subs = (from sub in TblUsers where sub.SupervisorID.Value==u.UserID select sub.DisplayName).ToList()
};
foreach (Position position in all) { foreach (Position position1 in all) { if (position1.ParentPositionID == position.ID) { if (position.Subs == null) { position.Subs = new List();
}
position.Subs.Add(position1);
}
}
}
有更好的方法吗? - Emad Gabriel