LINQ 怎么写有父子关系的递归排序
我的父子关系是无限级的
比如说
年级 1
一年级 1
二年级 2
二班 1
三班 2
四班 3
三年级 3
学期 2
就是要这种形式的排序,求帮助啊,在线等,有满意的就直接结题给分。。。。
[解决办法]
参考:http://topic.csdn.net/u/20110504/15/b3f85411-a630-44f8-aae6-a1ec0102158a.html
[解决办法]
- C# code
/// <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);
}
}
示例代码如下,其中ALL,是我已经获取到的所有结果集,我的主外键是GUID类型
- C# code
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);