获取与Sitecore中的DropLink选项匹配的所有项目

时间:2017-01-31 19:29:44

标签: c# sitecore

这似乎应该很容易。也许是,我只是在思考它。我有一堆通过DropLink设置了类别字段的项目。我想抓住所有与这些选项之一匹配的项目。例如,获取Category = Brochure的所有项目的列表。我似乎无法获得Droplink选项的ID以匹配Item本身的Category选项。

编辑:按要求包含当前代码。

public List<PoolDownload> Manuals
        {
            get
            {
                LookupField cat = (LookupField)this.Item.Fields["Category"];
                return this.Downloads.Where(i => (i.Item.TemplateID == PoolDownload.TemplateId) &&
                                        (i.Item.GlassCast<Pdp.Pool.Website.Business.Entities.PoolDownload>().Category.ToString() == cat.TargetID.ToString()))
                                        .ToList();
            }
        }

1 个答案:

答案 0 :(得分:1)

我认为问题在于您将Guid.ToString()Sitecore.Data.ID.ToString()进行比较。这两个语句返回不同的值:

var guidToString = Sitecore.Context.Item.ID.Guid.ToString();
// "2a6a1d9a-be1d-411b-821a-7e63775280b3"

var idToString = Sitecore.Context.Item.ID.ToString();
// "{2A6A1D9A-BE1D-411B-821A-7E63775280B3}"

同时将TargetID投放到Guid,你应该很好。

并在下面的评论中回答您关于显示&#34;下载项目&#34;按类别分组,您可以使用GroupBy方法https://msdn.microsoft.com/en-us/library/bb534304(v=vs.110).aspx,如下所示:

public IEnumerable<IGrouping<Guid, PoolDownload>> Manuals
{
    get
    {
        LookupField cat = (LookupField)this.Item.Fields["Category"];

        return this.Downloads.Where(i =>
            i.Item.TemplateID == PoolDownload.TemplateId
            && i.Item.GlassCast<Pdp.Pool.Website.Business.Entities.PoolDownload>().Category.ToString() == cat.TargetID.Guid.ToString())
            .GroupBy(i => i.Category);
    }
}

然后,要在新的Manuals属性中循环结果,您可以执行以下操作:

foreach(var categoryGroup in Manuals)
{
    var categoryGuid = categoryGroup.Key;

    foreach(var download in categoryGroup)
    {
        var downloadInCurrentGroup = download.Item;
    }
}
相关问题