查询具有多个相关数据项的项目(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。
伪代码如下:
使用 DynamicModuleManager 获取 HairColor 项目的 OriginalContentId(来自 HairColor 模块),其中 Color == "Black"
使用 DynamicModuleManager 获取 EyeColor 项目的 OriginalContentId(来自 EyeColor 模块),其中 EyeColor == "Hazel"
然后
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。
你可以用眼睛颜色模块做类似的事情,让所有的人都有淡褐色的眼睛,最后将两个结果相交,得到满足两个条件的人。
我指的是用相关数据查询动态内容的这篇文章:
https://docs.sitefinity.com/example-query-dynamic-content-by-related-data
这在处理单个相关项目时很好,但目前我正在处理这种情况:
我有一个自定义内容项 Human,以及两个类型为 Hair Color 和 Eye Color 的相关数据项(当然这些只是示例类型)
假设我想查询所有 Hazel 眼睛和黑头发的 Human 项目,我怎样才能以干净的方式做到这一点?
我想出了一个 hacky 解决方案,但我需要一些可以在不需要相关数据查询或一个或两个(所有组合)的情况下工作的东西
Sitefinity 的原生 API 是否有可靠的方法可以做到这一点?
我认为最干净的方法是除了 DynamicModuleManager 之外还使用 ContentLinksManager。
伪代码如下:
使用 DynamicModuleManager 获取 HairColor 项目的 OriginalContentId(来自 HairColor 模块),其中 Color == "Black"
使用 DynamicModuleManager 获取 EyeColor 项目的 OriginalContentId(来自 EyeColor 模块),其中 EyeColor == "Hazel"
然后
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。
你可以用眼睛颜色模块做类似的事情,让所有的人都有淡褐色的眼睛,最后将两个结果相交,得到满足两个条件的人。