• 主页
  • ASP
  • .NET Framework
  • Web Services
  • VB
  • VC
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • LINQ
zhanglong_longlong 2015年04月13日
递归问题,在线等
using System;
using System.Data;
using System.Text;

namespace ConsoleApplication1
{
public class Program
{
/// <summary>
/// 获取模拟数据
/// </summary>
private static DataTable GetContent()
{
DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Pid", typeof(int));
dt.Columns.Add("Name", typeof(string));


dt.Rows.Add(1, 0, "A");
dt.Rows.Add(2, 0, "B");
dt.Rows.Add(3, 1, "C");
dt.Rows.Add(4, 3, "D");
dt.Rows.Add(5, 2, "E");
dt.Rows.Add(6, 5, "F");
dt.Rows.Add(7, 3, "G");
return dt;
}

private static string Recursive(DataTable dt, DataRow row,out int id)
{
//查找是否有子节点
var rows = dt.Select("Pid=" + row["Id"]);
//如果有子节点,那么加上其全部的父节点
if (rows != null && rows.Length > 0)
{
foreach (var subrow in rows)
{
return row["Name"].ToString() + "==>" + Recursive(dt, subrow,out id);
}
}
id = Convert.ToInt32(row["Id"]);
return row["Name"].ToString();
}
static void Main(string[] args)
{
DataTable dt = GetContent();
int id = 0;

foreach (DataRow srow in dt.Select("Pid=0"))
{
Console.WriteLine("路径:"+Recursive(dt,srow,out id)+"\t最终子节点的Id:"+id);
}
}
}
}


这里输出的结果是:
路径:A==>C==>D 最终子节点的Id:4
路径:B==>E==>F 最终子节点的Id:6

我想要的结果是
路径:A==>C==>D 最终子节点的Id:4
路径:A==>C==>G 最终子节点的Id:7
路径:B==>E==>F 最终子节点的Id:6

应该怎么改,就大神看看
...全文
195 点赞 收藏 9
写回复
9 条回复

还没有回复,快来抢沙发~

发动态
发帖子
.NET技术社区
创建于2007-09-28

4.8w+

社区成员

66.8w+

社区内容

.NET技术交流专区
社区公告
暂无公告