用递归实现无限级菜单,产品分类,盖楼式评论、留言等功能。

下列代码不能直接使用

CREATE TABLE [dbo].[P_Category](
[Code] [varchar](36) NOT NULL PRIMARY KEY,
[Parent_Code] [varchar](36) NULL,
[Depth] [int] NULL,
[Name] [varchar](50) NULL
)
GO INSERT [dbo].[P_Category] ([Code], [Parent_Code], [Depth], [Name]) VALUES (N'101', N'1', 2, N'木门')
INSERT [dbo].[P_Category] ([Code], [Parent_Code], [Depth], [Name]) VALUES (N'10101', N'101', 3, N'室内木门')
INSERT [dbo].[P_Category] ([Code], [Parent_Code], [Depth], [Name]) VALUES (N'1010101', N'10101', 4, N'A02')
INSERT [dbo].[P_Category] ([Code], [Parent_Code], [Depth], [Name]) VALUES (N'101010101', N'10101', 5, N'A01')
INSERT [dbo].[P_Category] ([Code], [Parent_Code], [Depth], [Name]) VALUES (N'10101010101', N'101010101', 6, N'A0101')
INSERT [dbo].[P_Category] ([Code], [Parent_Code], [Depth], [Name]) VALUES (N'102', N'1', 2, N'B')
INSERT [dbo].[P_Category] ([Code], [Parent_Code], [Depth], [Name]) VALUES (N'10201', N'102', 3, N'B1')
INSERT [dbo].[P_Category] ([Code], [Parent_Code], [Depth], [Name]) VALUES (N'1020101', N'10201', 4, N'B2')

  

private List<Category> CategoryCacheAllList { get; set; }

[Route("")]
public HttpResponseMessage Get()
{
var list = CacheHelper<List<Category>>.GetCache(CategoryAllListCacheKEY);
if (list == null)
{
CategoryCacheAllList = CategoryService.GetCacheList(); //取得数据库里面所有数据
list = new List<Category>();
CategoryJson(list, "1");
CacheHelper<List<Category>>.SetCache(CategoryAllListCacheKEY, list);
}
return Request.CreateResponse(HttpStatusCode.OK, list);
//下面的代码这个没试
//string json = JsonConvert.SerializeObject(categoryList, Formatting.Indented);
//return json;
} /// <summary>
/// 取得兄弟节点
/// </summary>
/// <param name="categoryList"></param>
/// <param name="parentCode"></param>
public void CategoryJson(List<Category> categoryList, string parentCode)
{
var list = CategoryCacheAllList.FindAll(p => p.ParentCode == parentCode);
if (list.Count > 0)
{
foreach (var item in list)
{
CategoryTreeJson(item, item.Code);
categoryList.Add(item);
}
}
} /// <summary>
/// 递归出子对象
/// </summary>
/// <param name="sbCategory"></param>
/// <param name="parentCode"></param>
private void CategoryTreeJson(Category sbCategory, string parentCode)
{
var list = CategoryCacheAllList.FindAll(p => p.ParentCode == parentCode);
if (list.Count > 0)
{
sbCategory.Children = new List<Category>();
foreach (var item in list)
{
CategoryTreeJson(item, item.Code);
sbCategory.Children.Add(item);
}
}
}

  

namespace VipSoft.Base.Core.Entity
{
/// <summary>
/// 产品分类
/// </summary>
[Table("VipSoft_Category")]
public class Category
{
/// <summary>
/// 编码
/// </summary>
[Column(ColumnType.IncrementPrimary, Name = "Code")]
public string Code { get; set; } /// <summary>
/// 父级编码
/// </summary>
[Column(Name = "Parent_Code")]
public string ParentCode { get; set; } /// <summary>
/// 深度
/// </summary>
[Column(Name = "Depth")]
public int? Depth { get; set; } /// <summary>
/// 分类名称
/// </summary>
[Column(Name = "Name")]
public string Name { get; set; } /// <summary>
/// 排序
/// </summary>
[Column(Name = "Sequence")]
public int? Sequence { get; set; } /// <summary>
/// 状态
/// </summary>
[Column(Name = "Status")]
public int? Status { get; set; } /// <summary>
/// 创建时间
/// </summary>
[Column(Name = "Create_Date")]
public DateTime? CreateDate { get; set; } public List<Category> Children { get; set; } }
}

树型结构递归 实体递归 JSON格式的更多相关文章

  1. dzzoffice的树型结构用户管理设计

    在DzzOffice1.1的开发中,针对用户使用群体重新设计了,机构.部门.用户管理应用. 传统OA,企业相关程序,一般是设置机构-设置部门-设置职位-添加用户这样的步骤.每个步骤分为不同的管理界面. ...

  2. JSP中的一个树型结构

    看方力勋的javaWeb,采用左右值来表示树型结构(就是俺门的多级分类)表结构 页面代码 <%@ page language="java" import="java ...

  3. java树型结构的数据展现设计

    在做一个需求管理的页面时,需求的展现是不限层级树型结构,需求下还可以分拆任务,页面要展现的字段有20多个,而且需求采用通用表单设计,db采用大宽表存储,有一百多个字段.目前数据量不大,第一版采用普通的 ...

  4. 20-Ubuntu-文件和目录命令-查看目录树型结构-tree

    tree 以树状图列出当前目录下的文件目录结构 选项 含义 -d 只显示当前目录的子目录树型结构   显示当前目录的子目录和文件树型结构 例: 1.查看文档目录下的子目录和文件树型结构 2.查看文档目 ...

  5. 使用Map辅助拼装树状结构,消除递归调用

    目前菜单或其他树状结构在数据库中的存储,多数是以一个parentid作为关联字段,以一维形式存储.使用时全部查询出来,然后在内存中拼装成树状结构.现在主要涉及的是拼装方法的问题. 一般可以进行 递归调 ...

  6. Java实现树形结构的数据转Json格式

    在项目中难免会用到树形结构,毕竟这是一种常用的组织架构.楼主这里整理了两个实现的版本,可以直接拿来使用,非常方便. 楼主没有单独建项目,直接在以前的一个Demo上实现的.第一种,看下面代码: pack ...

  7. web api+递归树型结构

    using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Ne ...

  8. SQL Server 通过“with as”方法查询树型结构

    一.with as 公用表表达式 类似VIEW,但是不并没有创建对象,WITH  AS 公用表表达式不创建对象,只能被后随的SELECT语句,其作用: 1. 实现递归查询(树形结构) 2. 可以在一个 ...

  9. Delphi实现树型结构

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

随机推荐

  1. Linux下面安装RabbitMQ Cluster

    安装rabbitmq cluster: 设置 Erlang Cookie安装完RabbitMQ之后,在第一台机器上面启动RabbitMQ,然后在停止.复制node1上的/var/lib/rabbitm ...

  2. 在Linux CentOS 6.6上安装RedisLive

    Real time dashboard for redis 安装必须软件 1.安装pip到指定的python版本下面: curl -O https://bootstrap.pypa.io/get-pi ...

  3. IntelliJ IDEA 缺少 javax 包 支持

    在初次使用 IntelliJ IDEA 中,当你使用javax.servlet包下的类时(例:javax.servlet.http.HttpServlet), 在你会发现在IntelliJ IDEA里 ...

  4. 基于matplotlib的数据可视化(图形填充fill fill_between) - 笔记(二)

    区域填充函数有 fill(*args, **kwargs) 和fill_between() 1  绘制填充多边形fill() 1.1 语法结构 fill(*args, **kwargs) args - ...

  5. C# 禁止datagridview 自动产生列

    dataGridView1.AutoGenerateColumns = false;

  6. C语言的整型溢出问题

    整型溢出有点老生常谈了,bla, bla, bla… 但似乎没有引起多少人的重视.整型溢出会有可能导致缓冲区溢出,缓冲区溢出会导致各种黑客攻击,比如最近OpenSSL的heartbleed事件,就是一 ...

  7. 使用JDBC改变Oracle的session參数 NLS_DATE_FORMAT

    近期项目除了一个问题,场景大概是这种,项目在国外开发.在项目开发过程中使用了大量的Oracle函数TO_DATE,可是开发者没有写第二个參数. 所以项目在国外的server上能够正常执行.但是在国内的 ...

  8. Android自带的TTS功能

    在Android1.6之后添加了TextToSpeech,也叫TTS,把相应的文字转化成语音播报,增强了用户体验.可以根据语言播报 界面上的控件如下: 可以选择的语言 但有的语言不支持,比如中文就不支 ...

  9. Knockout: 实践CSS绑定和afterkeydown事件, 给未通过校验的输入框添加红色边框突出显示; 使用afterkeydown事件自动将输入转大写字母.

    目的: 实践一下Knockout提供的CSS绑定功能和afterkeydown事件. 步骤: 先在htm中添加.error的css样式, 并在输入框中绑定css: { error: !firstNam ...

  10. U811.1接口EAI系列之六--物料上传--VB语言

    1. 业务系统同步U811.1存货档案通用方法. 2.具体代码处理如下: 作者:王春天 2013-11-06 地址:http://www.cnblogs.com/spring_wang/p/34098 ...