コード例 #1
0
        public static List <T> TreeDataToList <T>(List <dynamic> source)
        {
            Action <List <dynamic>, List <T>, dynamic> AddItem = (mysource, mytarget, Recursive) =>
            {
                foreach (var oldrow in mysource)
                {
                    var newrow     = GenericUtil.CreateNew <T>();
                    var dictionary = (IDictionary <string, object>)GenericUtil.GetDictionaryValues(oldrow);

                    var childern = dictionary["childern"] as List <dynamic>;
                    if (childern.Count > 0)
                    {
                        Recursive(mysource, mytarget, Recursive);
                    }

                    foreach (var property in dictionary)
                    {
                        if (property.Key != "children")
                        {
                            GenericUtil.SetValue(newrow, property.Key, property.Value);
                        }
                    }

                    mytarget.Add(newrow);
                }
            };

            var target = new List <T>();

            AddItem(source, target, AddItem);

            return(target);
        }
コード例 #2
0
        public static Dictionary <string, Type> GetListProperties(dynamic list)
        {
            var type  = GenericUtil.GetGenericType(list);
            var names = new Dictionary <string, Type>();

            if (GenericUtil.IsDynamicType(type))
            {
                if (list.Count > 0)
                {
                    foreach (var item in GenericUtil.GetDictionaryValues(list[0]))
                    {
                        names.Add(item.Key, (item.Value ?? string.Empty).GetType());
                    }
                }
            }
            else
            {
                foreach (var p in ReflectionUtil.GetProperties(type))
                {
                    names.Add(p.Value.Name, p.Value.PropertyType);
                }
            }

            return(names);
        }
コード例 #3
0
        public static void EachObjectProperty(object row, Action <int, string, object> handle)
        {
            var index = 0;
            var dict  = GenericUtil.GetDictionaryValues(row);

            foreach (var item in dict)
            {
                handle(index++, item.Key, item.Value);
            }
        }
コード例 #4
0
        /// <summary>
        /// 将List数据转换成TreeData
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="source">list数据源</param>
        /// <param name="ID">id列名</param>
        /// <param name="PID">父id列名</param>
        /// <returns></returns>
        public static List <dynamic> ListToTreeData <T>(List <T> source, string ID, string PID) where T : class, new()
        {
            Action <List <dynamic>, T, dynamic> AddItem = (parent, item, Recursive) =>
            {
                var childrens = new List <dynamic>();
                var thisitem  = GenericUtil.GetDictionaryValues(item);

                source.FindAll(o => GenericUtil.GetValue(item, ID).Equals(GenericUtil.GetValue(o, PID)))
                .ForEach(subitem => { Recursive(childrens, subitem, Recursive); });

                thisitem.Add("children", childrens);
                parent.Add(thisitem);
            };

            var target = new List <dynamic>();

            source.FindAll(m => { return(!source.Exists(n => GenericUtil.GetValue(n, ID).Equals(GenericUtil.GetValue(m, PID)))); })
            .ForEach(item => AddItem(target, item, AddItem));

            return(target);
        }