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

下列代码不能直接使用

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. JVM调优总结(一)-- 堆和栈的基本概念

    数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:他代表的值就是数值本身:而引用类型的变量保存引用值.“引用值”代表了某个对象的引用,而不是对象本身, ...

  2. No package的问题解决

    更新pecl扩展 yum  install epel-release  //扩展包更新包yum  update //更新yum源

  3. 【javascript】js实现复制、粘贴

    使用document.ExecCommand("copy")命令,官方文档,点我. 例如: <!DOCTYPE html> <html> <head& ...

  4. Swift 类型检查与类型转换

    前言 在 Swift 语言中一般使用 is 关键字实现类型检查,使用 as 关键字实现类型转换,除此之外还可以通过构造器和方法来实现类型转换. 1.类型检查 1.1 使用 is 检查 类型检查操作符 ...

  5. 基于matplotlib的数据可视化 - 三维曲面图gca

    1 语法 ax = plt.gca(projection='3d')ax.plot_surface(x,y,z,rstride=行步距,cstride=列步距,cmap=颜色映射) gca(**kwa ...

  6. dbms_random.seed

    语法: DBMS_RANDOM.SEED ( val IN BINARY_INTEGER); DBMS_RANDOM.SEED ( val IN VARCHAR2); val: Seed number ...

  7. 一个酷绚的linux 桌面程序 GLX-DOCK (cario-dock)

    记录一个酷绚的linux  桌面程序  GLX-DOCK (cario-dock),支持多种风格的桌面主题. http://glx-dock.org/ 优势: 多个workspaces 方便自由切换 ...

  8. SharePoint 2013 Farm 安装指南——Least Privilege

    写过很多关于SharePoint 2013 安装,这是第四篇.可能你会觉得为什么如此简单的安装至于花那么多精力去折腾吗.我的答案是肯定的.知识的积累不是一蹴而就的,而是循序渐进的去学习,每一个阶段都有 ...

  9. struts2 常量

    struts.i18n.encoding 指定web应用的默认编码集

  10. 批量更新MongoDB的列。

    db.User.find().forEach( function(item){ db.User.update({"_id":item._id},{"$set": ...