关系作为c#中的变量集

时间:2013-10-14 00:02:14

标签: c# tuples

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

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

Jack-sales rep,Jill - 主管,James - 直线经理,Jacob - Director

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

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

例如,从关联表匹配相关键在销售代表列表中的条目和在管理员表中的employeekey。将此作为一组(销售代表,超级行为)获取,并继续使用列表中的最后一项查询关联表,直到所有列表都有效。

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

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

2 个答案:

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

因为如果你的概念设计对你的情况来说是最合适的(不一定是正确的)那么你可以更容易地实现代码。

例如,您可以使用Class创建IEnumerable<T>来执行递归层次结合连接 像这样one

或者您也可以先在后端RDMBS上解决此问题,例如mySQL/MSSQL,然后再在C#中调用它,例如one

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

答案 1 :(得分:0)

您可以解析您的表并将您解析的所有内容存储在List&gt;工作人员,每当找到一种新的工人级别(经理/主管等)时,将该级别添加为主要列表之一的新列表,并将具有此级别的工作人员添加到刚刚创建的列表中,最后将列出所有不同级别的工人的所有清单,工人自己将列入你想要的级别的工人名单......

(或者,您可能希望使用Dictionary<string,List<worker>>并将字典的键设为级别,例如SomeDict["Directors"].Add(ThisWorkerObject);