oracle11g isleaf,10g树形查询新特性CONNECT_BY_ISLEAF的9i实现方式
时间: 2023-11-26 12:06:44 浏览: 74
在 Oracle 9i 中,可以通过使用 `CONNECT_BY_ISLEAF` 伪列来确定节点是否是叶子节点,它的值为 1 表示是叶子节点,值为 0 表示不是叶子节点。
以下是一个在 Oracle 9i 中实现树形查询的示例:
```
SELECT LPAD(' ', 2*(LEVEL-1)) || emp_name, CONNECT_BY_ISLEAF
FROM emp
START WITH manager_id IS NULL
CONNECT BY PRIOR emp_id = manager_id;
```
该查询语句将在 `emp` 表中查询所有员工的名字,并通过 `manager_id` 字段与其上级进行连接,使用 `LEVEL` 伪列确定每个员工的层级,使用 `LPAD` 函数将员工名字进行缩进,最后使用 `CONNECT_BY_ISLEAF` 伪列确定每个员工是否是叶子节点。
相关问题
c# 遍历部门集合 设置 Level,IsLeaf,Expanded 等属性 需要符合jqgrid 树形表格结构
假设你需要将部门集合 `departmentList` 中的部门对象的 `Level`,`IsLeaf` 和 `Expanded` 等属性设置为符合 jqGrid 树形表格结构的值,可以按照以下步骤进行操作:
1. 首先,你需要将部门集合转换为树形结构。这可以通过递归方法实现,例如:
```
public static List<Department> GetDepartmentTree(List<Department> departmentList, int? parentId = null)
{
var tree = new List<Department>();
foreach (var department in departmentList.Where(d => d.ParentId == parentId))
{
department.children = GetDepartmentTree(departmentList, department.Id);
tree.Add(department);
}
return tree;
}
```
在这个方法中,`departmentList` 是部门集合,`parentId` 是父部门的 ID。方法返回一个树形结构的部门列表,其中每个部门对象都包含一个名为 `children` 的子部门列表。
2. 然后,你需要遍历树形结构,设置每个部门对象的 `Level`,`IsLeaf` 和 `Expanded` 等属性。可以按照以下方式实现:
```
public static void SetDepartmentProperties(List<Department> departmentTree, int level = 0, bool isLeaf = false)
{
foreach (var department in departmentTree)
{
department.Level = level;
department.IsLeaf = isLeaf;
department.Expanded = true;
if (department.children.Count == 0)
{
department.IsLeaf = true;
department.Expanded = false;
}
else
{
SetDepartmentProperties(department.children, level + 1, false);
}
}
}
```
在这个方法中,`departmentTree` 是树形结构的部门列表,`level` 是当前部门对象的级别,`isLeaf` 表示当前部门对象是否为叶子节点。方法使用递归方式遍历树形结构,对每个部门对象设置 `Level`,`IsLeaf` 和 `Expanded` 等属性。如果当前部门对象没有子部门,那么它就是叶子节点,不需要展开;否则,递归调用 `SetDepartmentProperties` 方法,继续设置子部门的属性。
3. 最后,你可以将树形结构的部门列表序列化为 JSON 格式,传递给 jqGrid 树形表格控件进行显示。例如:
```
var departmentTree = GetDepartmentTree(departmentList);
SetDepartmentProperties(departmentTree);
var json = JsonConvert.SerializeObject(departmentTree);
// 将 json 传递给 jqGrid 树形表格控件进行显示
```
在这个示例中,`JsonConvert.SerializeObject` 方法用于将树形结构的部门列表转换为 JSON 格式的字符串。你可以将该字符串传递给 jqGrid 树形表格控件的 `data` 属性进行显示。
c# 部门遍历树形集合符合 jqgrid 树形格式包括 id、parent、level、isLeaf 和 expanded
好的,那么你可以尝试下面的代码来实现:
```csharp
public class Department
{
public int Id { get; set; }
public string Name { get; set; }
public int? ParentId { get; set; }
public List<Department> Children { get; set; } = new List<Department>();
}
public static class JqGridHelper
{
public static List<Dictionary<string, object>> ConvertToJqGridTreeFormat(IEnumerable<Department> departments)
{
List<Dictionary<string, object>> result = new List<Dictionary<string, object>>();
foreach (var department in departments)
{
Dictionary<string, object> node = new Dictionary<string, object>();
node["id"] = department.Id;
node["parent"] = department.ParentId ?? "";
node["level"] = GetDepartmentLevel(department);
node["isLeaf"] = department.Children.Count == 0;
node["expanded"] = false;
result.Add(node);
if (department.Children.Count > 0)
{
List<Dictionary<string, object>> children = ConvertToJqGridTreeFormat(department.Children);
result.AddRange(children);
}
}
return result;
}
private static int GetDepartmentLevel(Department department)
{
int level = 0;
var parent = department;
while (parent.ParentId.HasValue)
{
level++;
parent = parent.Children.FirstOrDefault(d => d.Id == parent.ParentId);
}
return level;
}
}
```
这里我们定义了一个 Department 类,它包含部门的 id、name、parentId 和子部门列表 Children。然后,我们定义了一个 JqGridHelper 类,它有一个 ConvertToJqGridTreeFormat 方法,将部门列表转换为 jqGrid 树形格式所需的数据。
在 ConvertToJqGridTreeFormat 方法中,我们首先遍历部门列表,为每个部门创建一个节点,并设置节点的 id、parent、level、isLeaf 和 expanded 字段。然后,我们将这个节点添加到结果列表中。
接着,我们检查这个部门是否有子部门。如果有,我们递归调用 ConvertToJqGridTreeFormat 方法,获取子部门的节点列表,并将它们添加到结果列表中。
最后,我们定义了一个 GetDepartmentLevel 方法,用来计算部门的层级。这个方法会递归地往上查找部门的父部门,直到找到最顶层的部门为止。
你可以使用这个 JqGridHelper 类将你的部门列表转换为 jqGrid 树形格式所需的数据,并将它们传递给 jqGrid 控件。