0

我有一个“员工”表。员工有经理,这些关系设置在“关联”表中。

我需要将所有层次结构读入一个文件。例如

杰克销售代表,吉尔 - 主管,詹姆斯 - 直线经理,雅各布 - 总监

首先,我在列表中阅读了不同的员工级别。例如销售代表名单、主管名单等。

下一步是使用层次顺序中的列表查询关联表并开发集。

例如,从关联表匹配条目,其中相关键在销售代表列表中,员工键在主管表中。将其作为一组 (sales rep, supervior) 获取,并继续使用列表中的最后一项查询关联表,直到所有列表都工作。

我的麻烦是我找不到足够好的数据结构来保存变量级别集。随着列表处理的每个级别,该集合应该增长。有什么建议么?

欢迎任何替代解决方案。请注意,层次结构的数量可能很大(可能是一百万),性能很重要。

4

2 回答 2

1

根据您的帖子,您提到了构成该数据层次结构的至少两个表,即员工表和关联表。所以,这意味着关系的程度是二元的,即一个表与另一个表相关。

但是,我认为表示这一点的最佳方式是一元关系,即与自身相关的实体/表。例如:

 Employee table:

 EmployeeID   Lastname   Firstname    AssociationID
 --------------------------------------------------
 1001         Smith      John         NULL
 1002         Moore      Steve        NULL
 1003         George     Gerry        1001
 1004         Bosch      Anton        1002
 1005         Mitchell   Marlon       1001

因为如果您的概念设计最适合您的情况(不一定正确),那么您将更容易以代码方式实现。

例如,您可以创建一个ClasswithIEnumerable<T>来执行像这样的递归分层连接

RDMBS或者,您也可以先在后端解决它,mySQL/MSSQL例如在 C# 中调用它之前,例如 this one

您可能还想探索像这样使用通用集合的第三方

于 2013-10-14T03:56:24.753 回答
0

您可以解析您的表格并将您解析的所有内容存储在工人的 List> 中,每当找到一种新的工人级别(经理/主管等)时,将该级别添加为主要列表之一和工人的新列表将此级别放入您刚刚创建的列表中,最后您将拥有所有不同级别工人的所有列表,并且工人本身将在您想要的级别的工人列表中......

(或者,您可能想要使用Dictionary<string,List<worker>>并让字典的键成为 level ,例如SomeDict["Directors"].Add(ThisWorkerObject);

于 2013-10-14T00:33:25.293 回答