2017-08-30 92 views
0

我指的是這篇文章的查詢與相關數據的動態內容:單相關項目打交道時查詢項目與多個相關數據項(Sitefinity)

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

這是一切都很好,但目前我處理這樣的場景:

我有人類的自定義內容項和類型的頭髮顏色和眼睛顏色的兩個相關數據項(這些當然只是示例類型)

燮構成我想用淡褐色的眼睛和黑色的頭髮來查詢所有的人類物品,我怎樣才能以乾淨的方式做到這一點?

我想出了一個哈克的解決方案,但我需要的東西,將有要麼沒有相關的數據查詢工作所需,或用一個或兩個(所有組合)

是否有這樣做的一個嘗試和真正的方法與Sitefinity的本地API?

回答

0

我覺得最徹底的方法是使用ContentLinksManager除了DynamicModuleManager。

這裏是僞代碼:

  1. 使用DynamicModuleManager得到染髮項目的OriginalContentId(從染髮模塊)使用DynamicModuleManager得到OriginalContentId其中顏色== 「黑」

  2. 的眼睛顏色項(從眼睛顏色模塊),其中眼睛顏色==「淺褐色」

  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將具有所有黑頭髮人的主ID。

你可以做的眼睛顏色模塊類似的事情,並得到與淡褐色的眼睛所有的人終於都相交結果來獲取滿足這兩個條件的人。

+0

這是一個偉大的答案,謝謝。 這是那種我在做什麼已經,只是在一個更清潔的方式。不過,我希望有最好的東西在這一點更容錯: 我有一個端點,以獲取人體數據。它以眼睛的顏色和頭髮的顏色作爲參數,都是可選的。您和我提出的解決方案似乎依賴於必須檢索至少一個按條件過濾的集合。 如果這是它是如何,那就是這樣。 Sitefinity一直沒有那麼好玩。謝謝:) – rml

+0

你可以隨時檢查眼睛的顏色和髮色參數是否爲空,如果是這樣,只是返回所有人類,或者我不明白你的關注? –

+0

我目前做的,如果它是「既params中,沒有」這將是罰款 但是目前我已經寫的代碼了整整一個單獨的塊: 髮色,但沒有眼睛的顏色, 無毛顏色,而是眼睛的顏色, 沒有頭髮的顏色或者眼睛的顏色,和 無論頭髮顏色和眼睛顏色 – rml