我有以下 SQL Server 表结构,它是一个逻辑树文件夹结构。
我在 SQL Server 中使用 Linq to SQL。
我想做的是循环并在内存中创建文件夹结构,从根目录到所有子目录的主要父目录的分层文件夹。
我正在尝试使用一些 foreach 循环来完成它,但我还是不明白。我想我必须使用某种递归方式。
我试过的一些查询:
var flds = from folders in repo.Folders
join folders2 in repo.Folders on folders.Id equals folders2.idParent
select folders;
我的目标是迭代该文件夹逻辑结构。
最佳答案
如果你想在你的表中获取文件夹作为层次结构,你可以像这样创建它:
var tableData = repo.Folders.ToList();
var directories = tableData.Select(f => GetPath(f, table));
正如您所问,创建文件夹层次结构的递归方法是:
private static string GetPath(Folder f)
{
if (f.IdParent == 0)
{
return f.Name;
}
else
{
var parent = tableData.Find(d => d.Id == f.IdParent);
return GetPath(parent) + "|" + f.Name;
}
}
你会得到这样的输出:
它会给你一个完整的文件夹层次结构,我不知道你想怎么用它。所以你可以根据你的需要做一些修改。希望对您有所帮助!
我在这里添加代码来迭代和创建文件夹结构:
foreach (var dir in directories)
{
var folders = dir.Split('|');
var path = string.Empty;
foreach (var folder in folders)
{
path = path + "\\" + folder; // modify the path like '\\' if it is not valid I have not tested
CreateFolder(path); // implement this method for actual creation of folders
}
}
以及您创建文件夹的方法:
private static void CreateFolder(string directory)
{
var path = "C:" + directory; // add whenever you want to create structure
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
}
关于c# - 循环递归自连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24241155/