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

时间:2017-08-30 03:22:34

标签: c# .net sitefinity

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

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

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

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

假设我想用榛子眼睛和黑发查询所有人类物品,我该怎么做才能干净利落?

我提出了一个hacky解决方案,但是我需要一些可以使用无需相关数据查询,或者使用一个或两个(所有组合)的东西

使用Sitefinity的本机API是否有尝试和真实的方法?

1 个答案:

答案 0 :(得分:0)

我认为除了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);
    
  4. 现在,humanWithBlackHairMasterIds将拥有黑头发的所有人的masterIds。

    您可以使用眼睛颜色模块做类似的事情,让所有人都使用榛眼,最后将两个结果相交,以使人类满足这两种条件。