日期:2014-05-20  浏览次数:21201 次

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