设想
我需要从给定规范的对象列表中构建数据表。例如,我有一个 Order 对象的列表/数组,以及一个详细说明数据表应包含的内容的字符串规范,例如“ID;Date;Customer.ID;Customer.Name;Orderlines.Product.ID;Orderlines.Quantity;Orderlines。单价”。
order 类包含 Orderlines 的列表(详细信息),Orderline 类包含对 Product 的引用等。无论如何都是一个非常面向对象的设计。
我需要创建一个通用过程,它采用对象列表和字符串规范,然后找到所有连接。例如 AddToDataTableWithJoins(DataTable table, object[] objects, string specification)。
如果数组中存在两个订单,每个订单都有三个订单行,则结果将是一个有 6 行的数据表。
例如
{1,'2009-12-12 00:00',14,'John','DRY14',12.00,19.99}
{1,'2009-12-12 00:00',14,'John','DRY15',9.00,12.00}
{1,'2009-12-12 00:00',14,'John','DRY16',3,3.00}
{2,'2009-12-13 00:00',17,'Mike','ALR',10.00,16.00}
{2,'2009-12-13 00:00',17,'Mike','BBR',1.00,11.50}
{2,'2009-12-13 00:00',17,'Mike','PPQ',4,6.00}
但是话又说回来,Order 类可能有多个列表(详细信息),我必须承认,即使我熟悉反射和简单递归,我对此一无所知。
非常感谢任何有关如何创建此算法的建议。
想法
必须实施一个限制,以便规范的每一级中不存在多个列表,并且不同分支中不存在列表。例如,如果 Customer 类定义了一个 Order 对象列表,则不能允许以下规范:"ID;Date;Customer.ID;Customer.Orders.ID;Orderlines.Product.ID"
。
那么我相信,必须使用以下方法:
- 确定包含一个或多个一对多关系的分支。
- 遍历集合中的每个根对象(Order 对象)。
- 对于根对象中的每个属性,将不涉及一对多关系的每个属性的值存储在一个数组中。
- 使用递归并遍历复制数组的子集合中的每个对象。
- 当到达最外面的“节点”时,在 DataTable 中添加一个新行。
这些点可能会被修改,因为它们只是在这一点上的想法,但我想我已经接近了一些东西。
谢谢,斯特凡