我有一个数据表,它有2场FolderId,PARENT_ID。
我想筛选父项的所有子项并将其保存到另一个数据表中。 我能够使用两种方法和3个不同的循环实现这一点,没有一个更简单快捷的方式来实现这个使用Linq或什么的。
这里是我的代码
public DataTable ChildrenOf(string parent, DataTable dtFolders)
{
DataTable result = new DataTable();
try
{
if (dtFolders != null)
{
result = dtFolders.Clone();
foreach (DataRow child in dtFolders.Rows)
{
if (child["FolderId"].ToString() == parent)
{
result.Rows.Add(child.ItemArray);
}
}
foreach (DataRow dr in dtFolders.Rows)
{
if (ChildrenOfParent(parent, dtFolders) != null)
{
result.Rows.Add(ChildrenOfParent(parent, dtFolders).ItemArray);
parent = ChildrenOfParent(parent, dtFolders).ItemArray[0].ToString();
}
}
}
}
catch (Exception)
{
throw;
}
return result;
}
public DataRow ChildrenOfParent(string parent, DataTable dtChild)
{
DataRow drChild;
drChild = null;
try
{
foreach (DataRow dr in dtChild.Rows)
{
if (dr["ParentId"].ToString() == parent)
{
drChild = dr;
}
}
}
catch (Exception)
{
throw;
}
return drChild;
}
我已经做了用递归方法之前,这个任务。我不知道你为什么想把结果放到数据表中。大多数时候最好的解决方案是放在树视图中。 Treeview提供了非常好的结果。 Linq不适用于递归代码。 – jdweng