2017-05-08 25 views
1

我目前正在努力從我的動態模塊項目集合中獲取圖像數據。如何從Sitefinity 10中的動態模塊集合中檢索圖像數據?

我嘗試過搜索各種資源,但仍無法找到解決方案。

我有一個IQueryable類型,其中包含動態模塊項的集合。然後,我使用LINQ select來轉換這個集合來過濾數據並返回一個自定義類型。參閱以下內容:

IQueryable<DynamicContent> collection = (Query to Sitefinity for my custom dynamic module items); 

return collection.Select(b => new CustomType() 
{ 
    Title = b.GetValue<string>("Title"), 
    Body = b.GetValue<string>("Body"), 
    ExternalLink = b.GetValue<string>("ExternalLink"), 
    Image = b.GetRelatedItems<Image>("Image") 
}); 

當我嘗試上述所有其他屬性被填充除了它返回一個空的圖片對象的圖像屬性。但是當我使用單個項目時:

collection.FirstOrDefault().GetRelatedItems<Image>("Image") 

上面將返回一個Image對象。

不知道爲什麼我無法查詢我的IQueryable集合上的圖像數據,但僅當使用單個項目時,有任何想法?

謝謝大家!

回答

3

基於Sitefinity文檔(http://docs.sitefinity.com/for-developers-related-data-api):

當與現有數據API使用,你需要與主工作 兩種版本的相關數據項和項目,到你 創建一個關係。

問題是,當您查詢集合collection = (Query to Sitefinity for my custom dynamic module items);時,您不是按主版本過濾。

你的情況在兩個解決辦法:

1)過濾器收集僅對於主

collection = collection.Where(i=>i.Status == Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus.Master); 

2)對於每一個真人版接受它的主人

var masterItem = dynamicModuleManager.Lifecycle.GetMaster(itemLive); 

附:它適用於collection.FirstOrDefault().GetRelatedItems<Image>("Image"),因爲收集中的第一個元素是Master

P.P.S. GetRelatedItems會降低查詢速度,這是使用ContentLinks API的最佳方式,速度要快很多倍。例如:

var contentLinksManager = ContentLinksManager.GetManager(); 
var librariesManager= LibrariesManager.GetManager(); 
var masterId = data.OriginalContentId; //IF data is Live status or data.Id if is Master status 
var imageFileLink = contentLinksManager.GetContentLinks().FirstOrDefault(cl=>cl.ParentItemId == masterId && cl.ComponentPropertyName == "Image"); 
if (imageFileLink != null) 
{ 
    var image= librariesManager.GetImage(imageFileLink.ChildItemId); 
    if (image!= null) 
    { 
     // Work with image object 
    } 
} 
+0

非常感謝您的深入回覆,當我重新開始工作時,我會嘗試以上方法。一個簡單的問題,是否有任何性能測試顯示內容鏈接API比相關項目更快我有這樣的想法,即引入相關項目來取代內容鏈接API? –

+0

您可以在這裏找到包含測試編號的文章:https://www.americaneagle.com/blog/web-development-blog/staff/2015/04/30/the-cost-of-getting-related-items-in- sitefinity-s-api這是相當古老的,但仍然適用於Sitefinity 10 –

+0

再次感謝您分享上面的鏈接,我偶然發現你提到的文章,但沒有意識到! –