BN089-BS开发框架MVC4版/source20131023/Zephyr.Net/Zephyr.Utils/Convert/TreeData.cs
(完整代码) 2KBusing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Dynamic;
namespace Zephyr.Utils
{
public partial class ZConvert
{
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 = ZGeneric.GetDictionaryValues(item);
source.FindAll(o => ZGeneric.GetValue(item, ID).Equals(ZGeneric.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 => ZGeneric.GetValue(n, ID).Equals(ZGeneric.GetValue(m, PID))); })
.ForEach(item => AddItem(target, item, AddItem));
return target;
}
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 = ZGeneric.CreateNew<T>();
var dictionary = (IDictionary<string, object>)ZGeneric.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")
ZGeneric.SetValue(newrow, property.Key, property.Value);
mytarget.Add(newrow);
}
};
var target = new List<T>();
AddItem(source, target, AddItem);
return target;
}
}
}
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。