日期:2014-05-20 浏览次数:21229 次
/// <summary>
/// 对于可以树型化的数据进行树型化
/// </summary>
/// <typeparam name="T">需要树型化的数据类名 </typeparam>
/// <param name="collection">顶级树形集合 </param>
/// <param name="action">项处理过程 </param>
/// <param name="func">次级栏目获取方法 </param>
/// <param name="depth">深度,默认从0开始 </param>
public static void CTree <T>(IQueryable <T> collection, Action <T, int> action, Func <T, IQueryable <T>> func, int depth)
{
foreach (var item in collection)
{
action(item, depth);
var list = func(item);
CTree(list, action, func, depth + 1);
}
}
var roots=All.Where(u=>(!u.ParentId.HasValue)||u.ParentId==Guid.Empty); //结果集合,获取的树型结构放入此结果 List<TfMvcWeb.Models.channels> res=new List<TfMvcWeb.Models.channels>(); Action<TfMvcWeb.Models.channels, int> action = (item, depth) => { //do something about T res.Add(item); }; CTree(roots,action,u=>All.Where(j=>j.ParentId==u.Id),0);