欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# 构造tree菜单工具方法

程序员文章站 2022-08-09 18:12:07
如何构造tree数据结构,做个笔记,方便查阅,本方法是直接返回json字符串: 本方法是构造tree实体,返回实体: 相关的实体类 ECategoryModel.cs: ......

如何构造tree数据结构,做个笔记,方便查阅,本方法是直接返回json字符串:

        private string tomenujson(list<model> data, string parentid)
        {
            var sbjson = new stringbuilder();
            sbjson.append("[");
            var entitys = data.findall(t => t.parentid == parentid).tolist();
            if (entitys.count > 0)
            {
                foreach (var item in entitys)
                {
                    var strjson = jsonconvert.serializeobject(item, new jsonserializersettings { referenceloophandling = referenceloophandling.ignore });
                    strjson = strjson.insert(strjson.length - 1, ",\"childnodes\":" + tomenujson(data, item.id) + "");
                    sbjson.append(strjson + ",");
                }
                sbjson = sbjson.remove(sbjson.length - 1, 1);
            }
            sbjson.append("]");
            return sbjson.tostring();
        }

 本方法是构造tree实体,返回实体:

        /// <summary>
        /// 绑定列表递归方法
        /// </summary>
        /// <param name="ddl">构造tree数据结构返回的实体</param>
        /// <param name="menus">绑定的数据源</param>
        /// <param name="categoryid">父级id值</param>
        private void bindchanneltype(list<ecategorymodel> ddl, list<ecategory> menus, guid categoryid)
        {
            list<ecategory> filtermenu = menus.where(w => w.parentid == categoryid).tolist();

            foreach (var m in filtermenu)
            {
                var mextend = new ecategorymodel
                {
                    id = m.id,
                    parentid = m.parentid,
                    categoryname = m.categoryname,
                    url = m.url,
                    sort = m.sort,
                    isdelete = m.isdelete
                };
                ddl.add(mextend);
                bindchanneltype(mextend.children, menus, m.id);
            }
        }

相关的实体类 ecategorymodel.cs

using system;
using system.collections.generic;

namespace mseduplatform.models
{
    /// <summary>
    /// ecategory表实体类
    /// </summary>
    public class ecategorymodel
    {
        /// <summary>
        /// 菜单id
        /// </summary>          
        public guid id { get; set; }

        /// <summary>
        /// 父级菜单id
        /// </summary>          
        public guid parentid { get; set; }

        /// <summary>
        /// 菜单code
        /// </summary>          
        public string code { get; set; }

        /// <summary>
        /// 菜单名称
        /// </summary>          
        public string categoryname { get; set; }

        /// <summary>
        /// 菜单地址
        /// </summary>          
        public string url { get; set; }

        /// <summary>
        /// 菜单排序
        /// </summary>          
        public int sort { get; set; }

        /// <summary>
        /// 显示状态
        /// </summary>          
        public int states { get; set; }

        /// <summary>
        /// 栏目权限类别
        /// </summary>          
        public string authorizationtype { get; set; }

        /// <summary>
        /// 是否授权
        /// </summary>          
        public bool isauthorization { get; set; }

        /// <summary>
        /// 创建人
        /// </summary>          
        public guid creater { get; set; }

        /// <summary>
        /// 创建时间
        /// </summary>          
        public datetime createtime { get; set; }

        /// <summary>
        /// 修改人
        /// </summary>          
        public guid modify { get; set; }

        /// <summary>
        /// 修改时间
        /// </summary>          
        public datetime modifytime { get; set; }

        /// <summary>
        /// 是否逻辑删除
        /// </summary>          
        public int isdelete { get; set; }

        /// <summary>
        /// 子数据列表
        /// </summary>
        public list<ecategorymodel> children = new list<ecategorymodel>();
    }
}