我目前正在开发一个使用System.DirectoryServices命名空间创建DirectoryEntry对象的应用程序,并循环遍历整个层次结构以收集信息.
我不知道层次结构中每个DirectoryEntry对象的子条目数,因此我不能通过Children属性为蜘蛛创建N个嵌套循环
这是我的伪代码示例:
//root directory
DirectoryEntry root = new DirectoryEntry(path);
if(DirectoryEntry.Childern != null)
{
foreach(DirectoryEntry child in root.Children)
{
//loop through each Children property unitl I reach the last sub directory
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果您不知道对象中子目录的数量,创建循环来收集信息的最佳方法是什么?
(这可以应用于您不知道对象层次结构的任何类型的对象)
我有这样一张桌子:
id name parent_id
1 ab1 3
2 ab2 5
3 ab3 2
4 ab4 null
5 ab5 null
6 ab6 null
Run Code Online (Sandbox Code Playgroud)
我需要使用输入id = 1进行查询(例如),结果将如下所示:
id name parent_id
5 ab5 null
2 ab2 5
3 ab3 2
1 ab1 3
Run Code Online (Sandbox Code Playgroud)
(列出所有级别的所有父级,从项目id = 1开始)
我有一个描述层次结构的表:
Name MemberName
A B
A C
B D
D E
F G
Run Code Online (Sandbox Code Playgroud)
MemberName引用同一个表的Name列.从这张表中,我可以轻松查询B和C是A中的成员,D是B的成员,E是D的成员,G是F的成员.
基于这种结构,很难编写一个查询,表明D和E也间接成为A的成员.D和E也间接成为B的成员等等.所以我需要做的是建立一个新的表该节目显示了所有间接成员.所以对于上面的表数据,我最终会得到一个包含以下内容的表:
Name MemberName
A B
A C
A D
A E
B D
B E
D E
F G
Run Code Online (Sandbox Code Playgroud)
我首先将所有不是其他记录(顶级)记录成员的记录放入临时表中:
CREATE TABLE #TMP
(
[Name] varchar(20),
[MemberName] varchar(20)
)
DECLARE @iRowsFound INT
INSERT INTO #TMP ([Name],[MemberName])
(SELECT * FROM [HierarchyData] WHERE [Name] NOT IN
(SELECT [MemberName] FROM [HierarchyData]))
SELECT @iRowsFound = @@ROWCOUNT
Name MemberName
A B
A C
F G
Run Code Online (Sandbox Code Playgroud)
然后我的理论是,在一个while循环中,将临时表交叉连接到heirachy表,并将来自交叉连接的适用记录插回到临时表中,并执行while循环,直到十字架中没有更多适用的记录加入以插入:
WHILE (@iRowsFound > 0)
BEGIN …Run Code Online (Sandbox Code Playgroud) 所以我刚接受了面试,他们给了我一份他们希望我事先处理的任务清单.我完成了除了一个以外的所有任务,并且想知道是否有人能够对这个问题有所了解.
问题就是这样的
我完成了任务1-3,但是在问题4上被困了.我在过去的继承工作经历中并没有做太多的事情,这个问题对我来说似乎有点模糊.我向雇主解释了这一点,他们看起来还不错,但没有告诉我应该怎么做.它现在一直困扰着我,我想知道它是如何完成的.
我有以下几点:
从关系数据库的角度来看,这将是我将实现的内容:
从Rails建模的角度来看,我有以下内容(我避免编写对于我正在处理的这种关系/层次问题并不重要的字段):
class Product < ActiveRecord::Base
...
has_many :categories
class Category < ActiveRecord::Base
...
Here comes de doubt: How do I specify the parent_id?
Run Code Online (Sandbox Code Playgroud)
有没有办法指定一个类别有一个,只有一个父ID引用另一个类别?
如果我有以下情况:
public class Foo extends Baz{
private String banana = "banana";
//blah blah blah
}
public class Baz{
protected static String apple = "apple";
}
Run Code Online (Sandbox Code Playgroud)
哪个先创建,苹果还是香蕉?我想说苹果首先被创造,但我不确定.
我是mongodb的新手.
假设我的数据库中有一个"文件系统"层次结构:
db.directories.save({ _id: "root", directories: ["src", "lib"], files: ["config.cfg"] })
db.directories.save({ _id: "src", directories: [], files: ["file1.js", "file2.js"] })
db.directories.save({ _id: "lib", directories: [], files: [] })
db.files.save({ _id: "config.cfg", size: 2310 })
db.files.save({ _id: "file1.js", size: 5039 })
db.files.save({ _id: "file2.js", size: 1299 })
Run Code Online (Sandbox Code Playgroud)
我如何获得文件夹的总大小?
即"根"目录的总大小=文件的总大小+子目录的总大小
寻找SQL Server CTE示例来创建层次结构,以便我可以输出所有系列,例如展平每个层次结构.例如在家族树中如果root从grand Parent开始我需要每个家庭成员的层次结构列表的列表,其中包含成员详细信息+父级的行详细信息
Run Code Online (Sandbox Code Playgroud)child1 row child1 +Parent row child1 + Grand parent Row child2 Row child2 + parent row child2 + grand parent's row and so on
CREATE TABLE Family(id int NULL,
Name varchar(20) null, Parent_id int NULL, level int NULL )
INSERT INTO Family VALUES
(1, 'Grand Parent',NULL, 1),
(2, 'Parent' , 1, 2),
(3, 'Child1' , 2, 3),
(4, 'Child2' , 2, 3)
select * from Family;
id Name Parent_id level
1 Grand Parent NULL 1
2 …Run Code Online (Sandbox Code Playgroud) 我想对多个树中的对象进行分类以反映其特征并构建导航.
所以,考虑到以下树木:
Category1
-Category-1-1
-Category-1-2
Category2
-Category-2-1
-Category-2-2
--Category-2-2-1
Run Code Online (Sandbox Code Playgroud)
对象可以例如属于类别1-2和类别-2-2-1.
目标是能够从数据库中获取所有对象
一个更实际的例子:
类别可能具有"工具>园艺工具>切割器"的层次结构.
第二类:'硬物>金属物>小金属物'
对象'Pruners'将被归类为属于'Cutters'以及'Small metal objects'.
我希望能够
这个问题更能帮助我理解Yesod而不是其他任何东西.以http://www.yesodweb.com/book/basics为例,特别是mkYesod TH函数生成的代码.
我认为的问题是这个TH生成路由数据类型(数据路由HelloWorld = HomeR)和调用getHomeR等的yesodDispatch函数.
难点在于,在较大的项目中,您不能将getHomeR的定义拆分为单独的模块,因为Haskell的简单模块系统是严格分层的; 因此,如果getHomeR简称getHomeRimplementation这是在另一个模块中定义(比如HomeImplementation),那么该模块将需要导入的定义数据路由的HelloWorld和将有循环依赖关系.
在我看来,如果可以在单独的模块中声明RenderRoute,ParseRoute和YesodDispatch实例,则可以避免这种情况; 然后RenderRoute可以位于导入层次结构的底部,而YesodDispatch位于顶部.那有意义吗 ?也许我问这个问题的事实表明我对mkYesod TH 不了解 ; 例如,存在一些重要的相互关系,它们不应该分开.
hierarchy ×10
sql-server ×3
c# ×2
database ×2
inheritance ×2
.net ×1
haskell ×1
java ×1
loops ×1
model ×1
module ×1
mongodb ×1
nested-sets ×1
recursion ×1
sql ×1
t-sql ×1
tree ×1
web-crawler ×1
yesod ×1