110,549
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[ ] args)
{
//获取数据源
IList<Tree> entities = new List<Tree>();
entities.Add( new Tree() { ID = 10001, FatherID = 0, Name = "一级" } );
entities.Add( new Tree() { ID = 10002, FatherID = 0, Name = "二级" } );
entities.Add( new Tree() { ID = 10003, FatherID = 0, Name = "三级" } );
entities.Add( new Tree() { ID = 10004, FatherID = 10001, Name = "一级_1" } );
entities.Add( new Tree() { ID = 10005, FatherID = 10001, Name = "一级_2" } );
entities.Add( new Tree() { ID = 10006, FatherID = 10005, Name = "一级_2_1" } );
entities.Add( new Tree() { ID = 10007, FatherID = 10002, Name = "二级_1" } );
entities.Add( new Tree() { ID = 10008, FatherID = 10002, Name = "二级_2" } );
entities.Add( new Tree() { ID = 10009, FatherID = 10008, Name = "二级_2_1" } );
//递归起始点
Recursive( entities, 0, null );
foreach ( Tree t in entities )
{
Console.WriteLine( "ID:{0},Maps:{1}", t.ID, t.Maps );
}
Console.Read();
}
/// <summary>
/// 节点递归 -- 填充树地图
/// </summary>
/// <param name="entities">数据集</param>
/// <param name="fatherID">FatherID</param>
/// <param name="entityFather">子节点数据,用于保存地图</param>
static void Recursive(IList<Tree> entities, int fatherID, Tree entityFather)
{
var query = from c in entities where c.FatherID == fatherID select c;
foreach ( Tree entity in query )
{
if ( entityFather != null )
{
entityFather.Maps +=
!string.IsNullOrEmpty( entityFather.Maps ) ? "," + entity.ID : entity.ID.ToString();
Recursive( entities, entity.ID, entityFather );
}
else
{
entity.Maps +=
!string.IsNullOrEmpty( entity.Maps ) ? "," + entity.ID : entity.ID.ToString();
Recursive( entities, entity.ID, entity );
Recursive( entities, entity.ID, null );
}
}
}
}
public class Tree
{
public int ID { get; set; }
public string Name { get; set; }
public int FatherID { get; set; }
public string Maps { get; set; }
}
}