查询具有多个相关数据项的项目(Sitefinity)

Querying items with multiple related data items (Sitefinity)

我指的是用相关数据查询动态内容的这篇文章:

https://docs.sitefinity.com/example-query-dynamic-content-by-related-data

这在处理单个相关项目时很好,但目前我正在处理这种情况:

我有一个自定义内容项 Human,以及两个类型为 Hair Color 和 Eye Color 的相关数据项(当然这些只是示例类型)

假设我想查询所有 Hazel 眼睛和黑头发的 Human 项目,我怎样才能以干净的方式做到这一点?

我想出了一个 hacky 解决方案,但我需要一些可以在不需要相关数据查询或一个或两个(所有组合)的情况下工作的东西

Sitefinity 的原生 API 是否有可靠的方法可以做到这一点?

我认为最干净的方法是除了 DynamicModuleManager 之外还使用 ContentLinksManager。

伪代码如下:

  1. 使用 DynamicModuleManager 获取 HairColor 项目的 OriginalContentId(来自 HairColor 模块),其中 Color == "Black"

  2. 使用 DynamicModuleManager 获取 EyeColor 项目的 OriginalContentId(来自 EyeColor 模块),其中 EyeColor == "Hazel"

  3. 然后

    var cmanager = ContentLinksManager.GetManager(); var humanWithBlackHairMasterIds = cmanager
                      .GetContentLinks()
                      .Where(c => c.ParentItemType == "Human type" &&
                                  c.ChildItemType == "HairColor type" &&
                                  c.IsParentDeleted == false && 
                                  c.IsChildDeleted == false &&
                                  c.ChildItemId == ID_From_Point1)
                .Select(c => c.ParentItemId);
    

现在 humanWithBlackHairMasterIds 将拥有所有黑发人类的 masterId。

你可以用眼睛颜色模块做类似的事情,让所有的人都有淡褐色的眼睛,最后将两个结果相交,得到满足两个条件的人。