c#通用递归生成无限层级树

NewsType结构:

Id

ParentId

Name

children(List<NewsType>)

public void LoopToAppendChildren(List<NewsType> all,  NewsType curItem)
{
    var subItems = all.Where(ee => ee.ParentId==curItem.Id).ToList();
    curItem.children = new List<NewsType>();
    curItem.children.AddRange(subItems);
    foreach (var subItem in subItems)
    {
        LoopToAppendChildren(all, subItem);//新闻1.1
    }
}

//通用 ParentId,Id,children 用了反射效率不高

public void LoopToAppendChildren<T>(List<T> all, T curItem, string parentIdName = "ParentId", string idName = "Id", string childrenName = "children")
{
  var subItems = all.Where(ee => ee.GetType().GetProperty(parentIdName).GetValue(ee, null).ToString() == curItem.GetType().GetProperty(idName).GetValue(curItem, null).ToString()).ToList(); //新闻1

curItem.GetType().GetField(childrenName).SetValue(curItem, subItems);
  foreach (var subItem in subItems)
  {
    LoopToAppendChildren(all, subItem);//新闻1.1
  }
 }


调用:
//实例化一个根节点
NewsType rootRoot = new NewsType();
rootRoot.Id = 0;
rootRoot.ParentId = 0;
rootRoot.Name="根节点";

LoopToAppendChildren(dc.NewsType.ToList(), rootRoot);

时间: 2024-08-24 21:33:12

c#通用递归生成无限层级树的相关文章

线性结构转树形结构(生成无限层级菜单)

let list = [ { parentId: 0, id: 1, value: '1' }, { parentId: 3, id: 2, value: '2' }, { parentId: 0, id: 3, value: '3' }, { parentId: 1, id: 4, value: '4' }, { parentId: 1, id: 5, value: '5' }, ]; function listToTree(list){ //遍历整个列表 return list.filter

C# 中采用treeview递归生成目录树(Winform和Webform两种)

部门表: 课程表: 查询结果结构: 数据结构分析,部门分为部门id和部门名称:课程分为课程id,课程名称,课程路径和课程所属部门. 要求以部门为父节点展示不同部门下的课程. Winform采用treeview递归生成目录树using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using Sy

递归加载菜单树

1.创建数据库表 create table system_resource ( id bigint(11) not null primary key auto_increment comment 'id', resource_name varchar(20) not null comment '资源名称', resource_name_cn varchar(20) not null comment '资源中文名', resource_parent_name varchar(20) null co

Php无限层级并显示层级数

今天在处理递归无限层级菜单时,遇到一个稍微烧脑的问题,如何显示当前节点所在的层级数.废话不多说,我们先看个直观的无限层级: <?php // 这里的arr是直接从数据库取出的,仅作为测试数据 $arr = array( array('id' => 1, 'name' => '一级菜单a', 'pid' => 0),// pid 父级id array('id' => 2, 'name' => '一级菜单b', 'pid' => 0), array('id' =>

asp.net mvc+EF 递归生成树结构返回json

0.数据表结构,主要属性有:Id.parentId(父节Id).Text.Url……等等. 1.新建一个树结构MenuModels 1 public class MenuModels 2 { 3 private int _id; 4 private string _text; 5 private int? _parentid; 6 private string _icon; 7 private string _url; 8 private object _menus; 9 private Dic

无限分类树操作

获取相应分类id的分类树: public static function getCategoryTree($id){ //$model=M('category'); if($id>0){ $obj=self::selectTable('category',array('id'=>$id),true);//$model->where(array('id'=>$id))->find(); if(!is_null($obj)){ $childList=self::selectTab

无限层级且乱序的树形结构数据的整理,利用HashMap减少遍历次数

我们在展示一个机构树的时候,常常会遇到这样的一个问题,查询数据的时候,是从下往上查的,但展示数据的时候,又要从下往上展示. 这时候就要把查询到的数据进行整理从而得到我们想要的结构. 举个例子. ID PARENT_ID SOME_ATTRIBUTE_ID 2001 0   6292 6120 57010 6120 6115   6121 6115   6156 6121 56874 6115 2001   这是根据需求查询出的sql数据,但是它是无序的,所以很让人头疼,不知如何去处理,示意图是这

编写一个通用递归获取树形结构对象集合的方法

/// <summary> /// 通用递归获取树状子节点信息 /// </summary> /// <param name="item"></param> /// <param name="id"></param> /// <returns></returns> private List<T> getTreeListByPid<T, F>(Lis

CSS z-index 属性的使用方法和层级树的概念

CSS 中的 z-index 属性用于设置节点的堆叠顺序, 拥有更高堆叠顺序的节点将显示在堆叠顺序较低的节点前面, 这是我们对 z-index 属性普遍的认识. 与此同时, 我们总是对堆叠顺序捉摸不透, 将 z-index 的值设得很大也未必能将节点显示在最前面. 本文将通过一些例子对 z-index 的使用方法进行分析, 并且为各位带入 z-index 层级树的概念. 顺序规则 如果不对节点设定 position 属性, 位于文档流后面的节点会遮盖前面的节点. 定位规则 如果将 positio