【发布时间】:2013-09-25 14:17:39
【问题描述】:
我有DataTable 对象,它包含一些“树数据结构”。数据不存储在任何数据库中,我只是使用DataTable来操作数据,无需SQL Server。
我的数据看起来像这样(缩进只是为了更好地阅读这里):
DataTable dtCategories = GetCategoriesAsDataTable();
id name parentId
int string int
----------------------
1 One 0
2 OneA 1
3 OneB 1
4 Two 0
5 TwoA 4
6 TwoB 4
7 TwoAA 5
8 TwoAB 5
到目前为止 - 我正在考虑使用“where parentId = 0”选择第一级并将其放在单独的 DataTable 中,如下所示:
DataTable dtFirstLevel = dtCategories.Select("[parentId] = 0");
// and after this - create DataTable for second level
// but I don't know how can I use "IN" clause here
DataTable dtSecondLevel = dtCategories.Select(?????????);
- 如何只选择树的前 2 层?
- 如何在没有 SQL Server 的情况下选择此项(仅使用数据对象)?
【问题讨论】:
-
到目前为止你尝试过什么?您如何确定树的级别?除非您在数据与其行中的级别之间定义了关系(即缩进或 A [1] 与 AA [1-1] 与 AAB [1-1-2]),否则使用该选择属性对您毫无价值,因为有没有办法遍历一棵树。无论如何,您为什么要尝试使用 DataTable 对树结构进行建模?使用 SQL 这样做可能不是问题,但如果没有 WHERE 子句之类的东西,它会相当复杂。
-
我刚刚添加了“到目前为止我尝试过的内容”,我想现在你可以弄清楚如何确定树的级别了。
-
foreach (var dt in dtFirstLevel){ var secondLevel = dtCategories.Select(string.Format("[parentId] = {0}", dt.Id));工作吗? -
@DrewCopenhaver 所以我必须选择第一级(parentId=0)并迭代以获取 parentId 匹配的行?
-
不应该
TwoA和TwoB有4作为 parentId?