zoukankan      html  css  js  c++  java
  • c# 生成树方法

    数据结构接口:

     /// <summary>
        /// 实体类必须实现接口
        /// </summary>
        public interface IToTreeModel
        {
            int Id { get; set; }        
            int ParentId { get; set; }
            List<IToTreeModel> Children { get; set; }
            void AddChilrden(IToTreeModel node);
        }

    实现模型:

    /// <summary>
        /// 实体类实例
        /// </summary>
        public class ViewModel : IToTreeModel
        {
            public int Id { get; set; }
            public int ParentId { get; set; }
            public string Label { set; get; }    public List<IToTreeModel> Children { get; set; }
            public void AddChilrden(IToTreeModel node)
            {
                if (Children == null)
                    Children = new List<IToTreeModel>();
                this.Children.Add(node);
            }
        }

    方法处理:

    /// <summary>
        /// 处理
        /// </summary>
        /// <typeparam name="T"></typeparam>
        public class ToTree<T> where T : IToTreeModel
        {
            public static List<T> ToDo(List<T> models,int ParentId=0,bool IsParentId=true)
            {            
                var dtoMap = new Dictionary<int, T>();
                foreach (var item in models)
                {
                    if (!dtoMap.ContainsKey(item.Id))
                    {
                        dtoMap.Add(item.Id, item);
                    }
                }
                List<T> result = new List<T>();
                foreach (var item in dtoMap.Values)
                {
                    if (IsParentId)
                    {
                        if (item.ParentId == ParentId)
                        {
                            result.Add(item);
                        }
                        else
                        {
                            if (dtoMap.ContainsKey(item.ParentId))
                            {
                                dtoMap[item.ParentId].AddChilrden(item);
                            }
                        }
                    }
                    else
                    {
                        if (item.Id == ParentId)
                        {
                            result.Add(item);
                        }
                        else
                        {
                            if (dtoMap.ContainsKey(item.ParentId))
                            {
                                dtoMap[item.ParentId].AddChilrden(item);
                            }
                        }
                    }                
                }
                return result;
            }
        }

    使用:

    ar list = db.Mode.Select(x => new MenuTree
                    {
                        Id = x.ID,
                        Label = x.Name,
                        ParentId = x.ParentId
                    }).ToList();
    var data = ToTree<MenuTree>.ToDo(list);

    data数据就是最后的数据

  • 相关阅读:
    select_tag in rails about selected not change and onchange()
    debian7 请把标有“Debian GNU/Linux 7.1.0 _Wheezy_
    rails关于utf8问题-------------------utf8申明必须置顶
    ruby 删除文件
    svn conflict
    40亿个有序不同的数的文件中找一个缺失的数
    马云语录
    语音识别概率问题,一段在数学之美了看到的话
    两个有序数组的中位数
    磁盘文件排序-编程珠玑
  • 原文地址:https://www.cnblogs.com/ruiyuan/p/13933278.html
Copyright © 2011-2022 走看看