Sitecore Axes.IsDescendantOf/Axes.IsAncestorOf - Inclusive?

al3*_*ull 4 items sitecore sitecore6

有没有办法,我很想念有Sitecore的退货原因或什么true的都Item.Axes.IsDescendantOf()Item.Axes.IsAncestorOf()

var test =
Sitecore.Context.Database.GetItem("{862B466A-079B-40E7-8661-FC064EC28574}");  
Response.Write(test.Axes.IsAncestorOf(test));  
Response.Write(test.Axes.IsDes(test));
Run Code Online (Sandbox Code Playgroud)

// True
// True

编辑:任何可能偶然发现这个答案寻找非包容性的人,IsAncestorOf或者IsDescendantOf下面是一些例子,我需要在新选类别的多选字段中找到最高级别的元素.

newsCategories
   .Where(x => newsCategories
                       .Any(y => x != y && !x.Axes.IsDescendantOf(y)))
Run Code Online (Sandbox Code Playgroud)

newsCategories
   .Where(x => newsCategories
                       .Any(y => x != y && !x.Axes.IsDescendantOf(y)))
Run Code Online (Sandbox Code Playgroud)

Sea*_*ney 10

我不得不相信,在Sitecore的方法应该被命名为IsAncestorOfIsDescendantOf.根据您的发现,并快速查看Sitecore代码,这些方法应该真正命名IsAncestorOrSelf并且IsDescendantOrSelf.

对于这个例子,

Sitecore.Data.Items.Item x = //some item;
Sitecore.Data.Items.Item y = //some item;
x.Axes.IsAncestorOf(y)
x.Axes.IsDescendantOf(y)
Run Code Online (Sandbox Code Playgroud)

IsAncestorOf方法进行比较x.ID == y.ID.然后,它会保持比较x.IDIDŸ的父,这就是为什么它应该被命名的IsAncestorOrSelf.

IsDescendantOf方法是比较LongID路径的x起始LongID路径y.由于字符串始终以相同的字符串开头,我们再次看到应该命名此方法IsDescendantOrSelf.

仅供参考,LongID路径看起来像这样/{11111111-1111-1111-1111-111111111111}/{0DE95AE4-41AB-4D01-9EB0-67441B7C2450}/{110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9},我怀疑是使用而不是/sitecore/content/home为了解决sitecore允许兄弟姐妹具有相同名称的事实.