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); }
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); }
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); } }
/// <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); }