2017-05-08 24 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

再次感谢您分享上面的链接,我偶然发现你提到的文章,但没有意识到! –