首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

LINQ 如何写有父子关系的递归排序

2012-04-13 
LINQ 怎么写有父子关系的递归排序我的父子关系是无限级的比如说年级1一年级1二年级2二班1三班2四班3三年级

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

热点排行